如何对<float,string>对的向量进行排序,而不管字符串如何

Zac*_*Lee 2 c++ sorting

我正在尝试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';
}
Run Code Online (Sandbox Code Playgroud)

我得到的结果:(价值关系时的字母顺序)

1, a
1, b
1, c
1, d
1, e
Program ended with exit code: 0
Run Code Online (Sandbox Code Playgroud)

我想要的结果:(当元素关系时,前元素第一)

1, e
1, d
1, c
1, b
1, a
Program ended with exit code: 0
Run Code Online (Sandbox Code Playgroud)

Yks*_*nen 11

std::pair它是否比较运算符过载(参见参考资料)

默认情况下,operator <用于std::pair比较第一要素,如果它们相等,则第二元素.

std::stable_sort如果对中的第一个元素相等,则应提供自己的谓词并用于保留元素的顺序.

std::stable_sort(vec.begin(), vec.end(),
                 [](const auto& a, const auto& b){return a.first < b.first;});
Run Code Online (Sandbox Code Playgroud)

  • 我认为你可以做`const auto&a`等并稍微减少冗长 (2认同)