如何在c ++中基于第二个元素以降序对列表进行排序

问题描述 投票:1回答:3

我想知道是否有一种方法可以根据第二个元素对我的对列表进行排序。这是一个代码:

list<pair<string, unsigned int>> words;

words.push_back(make_pair("aba", 23);
words.push_back(make_pair("ab", 20);
words.push_back(make_pair("aBa", 15);
words.push_back(make_pair("acC", 8);
words.push_back(make_pair("aaa", 23);

我想按整数元素对我的列表单词进行降序排序,以便我的列表像:

<"aba", 23>,<"aaa", 23>,<"ab", 20>,<"aBa", 15>,<"acC", 8>

此外,是否可以通过第一个元素和第二个元素对它们进行排序,从而使其首先按第二个元素(按整数值)进行排序,然后如果存在两个或更多对具有相同第二个元素(即相同的整数值) ),那么它将根据字母顺序中的第一个元素对它们进行排序,然后我上面的排序列表中的前2对将交换,所以:

<"aaa", 23>,<"aba", 23>,<"ab", 20>,<"aBa", 15>,<"acC", 8>

如果这不能用列表来完成,可以用向量来完成吗?提前谢谢〜

c++ list sorting stl containers
3个回答
2
投票

我想以降序]基于整数元素对列表单词进行排序

如果您按既定顺序传递的第一个元素(即,第一对)在第二个之前,则排序谓词必须返回true

words.sort([](auto const& a, auto const& b) {
      return a.second > b.second;
});

由于要以降序排列]对列表进行排序,如果a对的第二个元素(即b)大于int的第二个元素,则它们对将在b之前。


请注意,std::sort()不适用于对std::sort()进行排序,因为它需要随机访问迭代器,但std::list仅提供双向迭代器。

std::list函数的重载之一允许您添加自定义比较函数:

std::sort

然后您可以使用以上重载。它应该是这样的:

std::sort

[看一下template <class RandomIt, class Compare> void sort(RandomIt first, RandomIt last, Compare comp); std::sort(words.begin(), words.end(), [](const std::pair<string, unsigned int> &x, const std::pair<string, unsigned int> &y) { return x.second > y.second; }); 函数:它将比较器作为第三个参数:您可以在其中定义所需的任何排序逻辑。


0
投票

std::list函数的重载之一允许您添加自定义比较函数:


0
投票

[看一下template <class RandomIt, class Compare> void sort(RandomIt first, RandomIt last, Compare comp); std::sort(words.begin(), words.end(), [](const std::pair<string, unsigned int> &x, const std::pair<string, unsigned int> &y) { return x.second > y.second; }); 函数:它将比较器作为第三个参数:您可以在其中定义所需的任何排序逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.