我目前有一个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]将交换 . 谢谢
只需写下比较器:
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, 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);
2 回答
只需写下比较器:
编写函子而不是函数更好,但概念是相同的 .
这就像一个字符串向量,除了一串字符,我们有一串数字 . 我想你想要这个:
......排序......
...对?
要做到这一点,你需要编写一个带有两个数字向量的比较器类或函数,如果第一个小于第二个,则返回“true” . 喜欢:
然后将其传递给sort():