【问题标题】:How to sort elements of pairs inside vector?如何对向量内的对元素进行排序?
【发布时间】:2016-04-14 12:10:45
【问题描述】:

我在一个向量中有一对int和string,如何首先根据int对它们进行排序,如果int值重复则根据string的字典顺序排序。

vector< pair<int, string> > v;

【问题讨论】:

标签: c++ sorting std-pair


【解决方案1】:

你只是:

std::sort(v.begin(), v.end());

std::pair 按字典顺序进行比较。

另一方面,如果您想根据std::pair 的第二个元素对它们进行排序,那么您必须按以下方式定义自定义比较器:

std::sort(v.begin(), v.end(), [](std::pair<int, std::string> const &p1,
                                 std::pair<int, std::string> const &p2) { 
                                   return (p1.second == p2.second)?
                                             p1.first < p2.first  :
                                             p1.second < p2.second;
                              });

【讨论】:

  • 如果向量有这些元素:nitin 85, akash 99, bhanu 85,我想排序使得向量现在有 akash 99,bhanu 85,nitin 85
  • 您提供的答案将给出以下输出:bhanu 85, nitin 85, akash 99 但希望与此相反。
  • @Ni3_k - 所以传入一个比较谓词来执行你的自定义排序。
  • @Ni3_k 那么你将拥有std::vector&lt;std::pair&lt;std::string, int&gt;&gt; 而不是 OP 所说的std::vector&lt;std::pair&lt;int, std::string&gt;&gt;
  • 我有 std::vector<:pair std::string>>
【解决方案2】:

我所做的是存储 int 值乘以 -1,然后按升序对其进行排序,然后再次乘以 -1 到存储的 int 值以恢复 int 值。这样做可以根据需要排列成对的向量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    相关资源
    最近更新 更多