首页 文章

用一个元素对std :: vector进行排序?

提问于
浏览
0

我目前有一个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]将交换 . 谢谢

2 回答

  • 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);
    

    编写函子而不是函数更好,但概念是相同的 .

  • 5

    这就像一个字符串向量,除了一串字符,我们有一串数字 . 我想你想要这个:

    [
      [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);
    

相关问题