gpt4 book ai didi

c++ - 在 map 中排序(字典顺序)

转载 作者:行者123 更新时间:2023-11-30 02:15:03 25 4
gpt4 key购买 nike

输出应按名称的字典顺序排序,如果两个名称相同,则按标记的降序排序。

#include <iostream>
#include <map>
#include <tuple>

int main() {
int t;
std::cin >> t;
while(t--) {
int n;
std::cin >> n;
std::string name;
int marks;
std::map<std::pair<std::string, int>, int> hash;
for(int i = 0; i < n; i++) {
std::cin >> name >> marks;
std::pair<std::string, int> p;
p.first = name;
p.second = marks;
hash[p]++;
}

for(auto it = hash.begin(); it != hash.end(); ++it) {
std::cout << (it->first).first << " " << (it->first).second << " "
<< it->second << "\n";
}
}
return 0;
}

最佳答案

如果您希望 map 的条目按特定顺序排序(默认顺序为 operator < ,这不会满足您的要求),那么您需要使用自定义比较器实例化您的 map 。

struct myComp {
bool operator()(const std::pair<std::string, int>& lhs,
const std::pair<std::string, int>& rhs) const
{ /* your code here */ }
};

std::map<std::pair<std::string, int>, int, myComp> m;

您的比较对象应该对值施加严格的弱排序。这意味着对于任何 std::pair<std::string, int> a,b,cmyComp cmp :

  • cmp(a, a)是假的。
  • 如果cmp(a, b)为真,则cmp(b, a)是假的。
  • 如果cmp(a, b)是真的 cmp(b, c)为真,则cmp(a, c)是真的。

关于c++ - 在 map 中排序(字典顺序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56719522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com