c++ - 如何根据其值的属性对 vector 进行排序?

标签 c++ vector

如果我有一个对 vector

vector<pair<int,vector<int>>> myvector;

如何根据其内部 vector 的第 n 个元素对该 vector 进行排序?

我的 previously-asked question on this topic包含使用预定义的 sorting_function() 根据对的第二个元素对对 vector 进行排序的答案,如下所示。但是,在这种情况下,我不知道 sorting_function() 的形式应该是什么......

sort(v.begin(), v.end(), sorting_function());

最佳答案

您可以重复使用我对您上一个问题的回答中的比较器; sort 需要它的一个实例,所以传入一个临时实例:

std::sort(v.begin(), v.end(), MyComparator<1>());

So, here's the full example:

template <std::size_t N>
struct MyComparator
{
   typedef std::pair<int, std::vector<int>> value_type;
   bool operator()(const value_type& lhs, const value_type& rhs)
   {
      return lhs.second.at(N) < rhs.second.at(N);
   }
};

/**
 * A set of (int, int{2,}) pairs, sorted by the 2nd element in
 * the 2nd item of each pair.
 */
std::vector<std::pair<int, std::vector<int>>> my_data;

int main()
{
    my_data.push_back(std::make_pair(1, std::vector<int>{0,5,0,0}));
    my_data.push_back(std::make_pair(2, std::vector<int>{0,2,0,0}));
    my_data.push_back(std::make_pair(3, std::vector<int>{0,1,0,0}));
    my_data.push_back(std::make_pair(4, std::vector<int>{0,9,0,0}));

    std::sort(my_data.begin(), my_data.end(), MyComparator<1>());

    for (const auto& el : my_data)
        std::cout << el.first << ' ';
}

// Output: 3 2 1 4

( live demo )

关于c++ - 如何根据其值的属性对 vector 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24244292/

相关文章:

c++ - 在具有所有 const 数据成员的类中实现复制赋值运算符是否有意义?

c++ - 将 std::shared_ptr<Derived> 转换为 const shared_ptr<Base>&

c++ - 打印 `vector<pair<int, int>>`

c++ - 为动态矩阵类实现自定义迭代器

c++ - 将复数运算符+(double,complex) 实现为成员函数

C++ 文件输入循环有困难吗?

c++ - 如何在构造函数中初始化数组?

c++ - C++ 中的多态 vector

c++ - 如何检查具有自定义类的 vector 是否为 NULL?

java - Java 中 vector 的点积/标量积