C++ 如何在c+中根据第二个元素按降序对对对列表进行排序+;
我想知道是否有办法根据第二个元素对我的配对列表进行排序。下面是一个代码:C++ 如何在c+中根据第二个元素按降序对对对列表进行排序+;,c++,list,sorting,stl,containers,C++,List,Sorting,Stl,Containers,我想知道是否有办法根据第二个元素对我的配对列表进行排序。下面是一个代码: std::列出单词; 单词。推回(std::使配对(“aba”,23); 单词。推回(标准::制作配对(“ab”,20); 单词。推回(std::使配对(“aBa”,15); 单词。推回(标准::制作配对(“acC”,8); 单词。推回(标准::制造成对(“aaa”,23); 我想按整数元素的降序对列表中的单词进行排序,以便我的列表如下所示: <"aba", 23>,<"aaa", 23>,<
std::列出单词;
单词。推回(std::使配对(“aba”,23);
单词。推回(标准::制作配对(“ab”,20);
单词。推回(std::使配对(“aBa”,15);
单词。推回(标准::制作配对(“acC”,8);
单词。推回(标准::制造成对(“aaa”,23);
我想按整数元素的降序对列表中的单词进行排序,以便我的列表如下所示:
<"aba", 23>,<"aaa", 23>,<"ab", 20>,<"aBa", 15>,<"acC", 8>
,,,,
此外,是否可以同时按第一个和第二个元素对它们进行排序,以便它首先按第二个元素进行排序(按整数值),然后如果有两个或更多对具有相同的第二个元素(即相同的整数值),然后它将根据第一个元素按字母顺序对它们进行排序,然后我上面排序的列表中的前两对将交换,因此:
<"aaa", 23>,<"aba", 23>,<"ab", 20>,<"aBa", 15>,<"acC", 8>
,,,,
有一个成员函数,用于进行排序
它的两个重载之一接受自定义比较函数:
模板
无效排序(比较comp);
您可以按如下方式使用:
words.sort([])(const std::pair&x,
const std::pair&y)
{
返回x秒>y秒;
});
有一个成员函数,用于进行排序
它的两个重载之一接受自定义比较函数:
模板
无效排序(比较comp);
您可以按如下方式使用:
words.sort([])(const std::pair&x,
const std::pair&y)
{
返回x秒>y秒;
});
我想对我的列表中的单词按照降序的整数元素进行排序
如果按照既定顺序传递的第一个元素(即第一对)先于第二个元素,则排序谓词必须返回true
:
words.sort([](auto const& a, auto const& b) {
return a.second > b.second;
});
由于您希望按降序对列表进行排序,因此如果对a
的第二个元素(即int
)大于b
的第二个元素,则该对a
将位于b
之前
请注意,这不适用于排序
std::list
,因为它需要随机访问迭代器,但std::list
仅提供双向迭代器
是否可以同时按第一个和第二个元素对它们进行排序,以便它首先按第二个元素进行排序(按整数值),然后如果有两个或更多对具有相同的第二个元素(即相同的整数值),那么它将根据第一个元素按字母顺序对它们进行排序 再次假设
int
元素的降序,当两个int
元素相同时,只需使用对中的第二个元素:
lst.sort([](auto const& a, auto const& b) {
if (a.second > b.second)
return true;
if (a.second < b.second)
return false;
return a.first < b.first;
});
我想对我的列表中的单词按照降序的整数元素进行排序
如果按照既定顺序传递的第一个元素(即第一对)先于第二个元素,则排序谓词必须返回true
:
words.sort([](auto const& a, auto const& b) {
return a.second > b.second;
});
由于您希望按降序对列表进行排序,因此如果对a
的第二个元素(即int
)大于b
的第二个元素,则该对a
将位于b
之前
请注意,这不适用于排序
std::list
,因为它需要随机访问迭代器,但std::list
仅提供双向迭代器
是否可以同时按第一个和第二个元素对它们进行排序,以便它首先按第二个元素进行排序(按整数值),然后如果有两个或更多对具有相同的第二个元素(即相同的整数值),那么它将根据第一个元素按字母顺序对它们进行排序 再次假设
int
元素的降序,当两个int
元素相同时,只需使用对中的第二个元素:
lst.sort([](auto const& a, auto const& b) {
if (a.second > b.second)
return true;
if (a.second < b.second)
return false;
return a.first < b.first;
});
用“<代码> STD::向量<代码> >代替<代码> STD::清单< /代码>,考虑对<代码> STD::向量< /代码>提出新的答案。这是否回答了您的问题?使用<代码> STD::向量< /代码>而不是<代码> STD::列表< /代码>更改答案,考虑对<代码> STD::V问一个新的答案吗?ector。抱歉,我对编程非常陌生。所以在我的头文件中,我是否将bool sortbysecond([](auto const&a,auto const&b){return std::tie(b.second,a.first)
words.sort(…)
。它是std::list
的一个成员函数。但是,您也可以使用std::sort()
的谓词对std::vector
进行排序。如果您想编写函数而不是lambda,那么它将是bool sortbysecond(const std::pair&a,const std::pair&b){返回std::tie(b.second,a.first)
.ah!编译成功了!你知道我如何迭代我的排序列表,以便打印出来,看看它们是否正确排序吗?非常感谢!确实如此!非常感谢你的帮助!抱歉,我对编程非常陌生。那么在我的头文件中,我是否将bool sortbysecond([](auto-const&a,auto-const&b){return std::tie(b.second,a.first)words.sort(…)
。它是std::list
的一个成员函数。但是,您也可以使用std::sort()
的谓词对std::vector
进行排序。如果您想编写函数而不是lambda,那么它将是bool sortbysecond(const std::pair&a,const std::pair&b){返回std::tie(b.second,a.first)打成平局(一秒,一秒)