std::list
函数的重载之一允许您添加自定义比较函数:
我想知道是否有一种方法可以根据第二个元素对我的对列表进行排序。这是一个代码:
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>
如果这不能用列表来完成,可以用向量来完成吗?提前谢谢〜
我想以降序]基于整数元素对列表单词进行排序
如果您按既定顺序传递的第一个元素(即,第一对)在第二个之前,则排序谓词必须返回
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;
});
函数:它将比较器作为第三个参数:您可以在其中定义所需的任何排序逻辑。
std::list
函数的重载之一允许您添加自定义比较函数:
[看一下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;
});
函数:它将比较器作为第三个参数:您可以在其中定义所需的任何排序逻辑。