我目前有一个std :: vector,它持有std :: vector of double。我想用双vectore的第二个元素对它进行排序。例如: 而不是按MyVec [0]或myvec [1]排序我根据myvec [0] [1] myvec [1] [1]对myVec [0]和myvec [1]进行排序。基本上按包含的值排序,而不是其中的对象。
所以如果myvec [0] [1]小于myvec [1] [1]那么myvec [0]和myvec [1]将交换。 感谢
答案 0 :(得分:5)
只需写下比较器:
bool my_comparator(const std::vector<double>& lhs, const std::vector<double>& rhs)
{
assert(lhs.size() >= 2 && rhs.size() >= 2);
return lhs[1] < rhs[1];
}
...
std::sort(big_vector.begin(), big_vector.end(), my_comparator);
最好编写一个函子而不是函数,但概念是相同的。
答案 1 :(得分:1)
这就像一个字符串向量,除了一串字符,我们有一串数字。我想你想要这个:
[
[1, 0, 4],
[4, 9, 9],
[0, 1, 9],
[4, 5. 2]
]
......排序......
[
[0, 1, 9],
[1, 0, 4],
[4, 5. 2],
[4, 9, 9]
]
...右?
要做到这一点,你需要编写一个带有两个数字向量的比较器类或函数,如果第一个小于第二个,则返回“true”。像:
bool my_comparator(const std::vector<double> &a, const std::vector<double> &b)
{
// return true if a < b ... by comparing a[0] with b[0], etc.
}
然后将其传递给sort():
sort(?, ?, my_comparator);