在一个向量中交换两个值

问题描述:

我试图在随机设置的点的图上找到最左边的点。例如,在点(3,5)(5,2)(8,7)(1,3)中,最左边的点将是(1,3)。一旦我这样做,我必须将最左点放在矢量的点0中。我无法切换两个变量,因为我不知道mostLeft最初来自哪个点。 mostLeft是一个包含两个整数的节点。在一个向量中交换两个值

我一直在使用

swap(list[0], mostLeft) 

,但它只是拷贝mostLeft两次试图。

我也曾尝试

Point temp = list[0]; 
    list.erase(remove(list.begin(), list.end(). mostLeft), list.end()); 
    list[0] = left; 
    list.push_back(temp); 

但是这给我的错误“不能转换载体为const char *为参数删除”。我从网上获得了第二块代码。我不确定它如何工作,但我一直看到它弹出,所以我试了一下。

有没有简单的方法来交换这些值,或者我必须手动遍历向量并找到值。

+2

请提供有效的小例子,该代码没有编译,'bein()'或'list.end()。mostleft'肯定不是从你正在使用的或者你正在使用的东西中获取的。 –

+0

@mhemmy目前还不清楚你如何得到最左边的交换使用(列表[0],mostLeft) –

+0

我猜'mostLeft'是_不是一个参考。 – MSalters

如果我理解正确,你正在努力实现那么你可以用下面的办法

#include <iostream> 
#include <utility> 
#include <vector> 
#include <algorithm> 

int main() 
{ 
    std::vector<std::pair<int, int>> v = 
    { 
     { 3, 5 }, { 5, 2 }, { 8, 7 }, { 1, 3 } 
    }; 

    for (const auto &p : v) 
    { 
     std::cout << "(" << p.first << ", " << p.second << ") "; 
    } 
    std::cout << std::endl; 

    auto mostLeft = [](const auto &a, const auto &b) { return a.first < b.first; }; 

    std::swap(v[0], *std::min_element(v.begin(), v.end(), mostLeft)); 

    for (const auto &p : v) 
    { 
     std::cout << "(" << p.first << ", " << p.second << ") "; 
    } 
    std::cout << std::endl; 
} 

程序输出是

(3, 5) (5, 2) (8, 7) (1, 3) 
(1, 3) (5, 2) (8, 7) (3, 5)