我正在尝试按升序对std::vector<std::pair<float, std::string>>
进行排序。
尽管使用std::sort
可行,但我发现如果浮点数具有相同的值,则字符串会影响顺序。
我想对向量进行排序,而不管字符串如何,因此前一个元素始终位于第一个元素之后。
我的代码:
#include <iostream>
#include <vector>
#include <string>
int main()
{
std::vector<std::pair<float, std::string>> vec;
vec = {{1, "e"}, {1, "d"}, {1, "c"}, {1, "b"}, {1, "a"}};
std::sort(vec.begin(), vec.end());
for (auto i : vec)
std::cout << i.first << ", " << i.second << '\n';
}
我得到的结果:(价值联系时的字母顺序)
1, a
1, b
1, c
1, d
1, e
Program ended with exit code: 0
我想要的结果:(价值联系在一起时,前者优先)
1, e
1, d
1, c
1, b
1, a
Program ended with exit code: 0
答案 0 :(得分:11)
std::pair
是否正在比较重载(See the reference)的运算符
默认情况下,operator <
的{{1}}比较第一个元素(如果相等),然后比较第二个元素。
如果成对的第一个元素相等,则应提供自己的谓词并使用std::pair
来保留元素的顺序。
std::stable_sort
答案 1 :(得分:0)
您可能正在搜索std::stable_sort
。在对元素进行排序的同时保留等价顺序。
答案 2 :(得分:-1)