Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在c+中根据第二个元素按降序对对对列表进行排序+;_C++_List_Sorting_Stl_Containers - Fatal编程技术网

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)打成平局(一秒,一秒)