gpt4 book ai didi

c++ - 如何比较 multimap 中的值

转载 作者:行者123 更新时间:2023-11-30 04:15:59 24 4
gpt4 key购买 nike

我了解到 multimap 是 <key,value>允许重复键的对(与 map 不同)。帮助我首先按(自动发生)然后按(即名称)对 multimap 进行排序。

int main()
{
multimap<int,string>info; // <key,value>
char name[10000];
int age;

//Input till EOF
while (std::cin >> name >> age){
info.insert( pair<int,string>(age,name) );
}

//sorted output according to key i.e age
map<int,string> :: iterator i;
for(i=info.begin(); i !=info.end(); i++)
cout<<(*i).second<<endl;
}

输入:

公爵夫人 26
玛丽 8
柏辽兹 8
图卢兹 7
托马斯 28

输出:
图卢兹 7
柏辽兹 8
玛丽 8
公爵夫人 26
托马斯 28

这里 ages(integers) 是键,所以它首先根据 age 排序,但如果两个或更多 age 与 BERLIOZ 和 MARIE 中的相同,则需要在 MARIE 之前打印 BERLIOZ,因为 B 按字母顺序优于 M .

最佳答案

multimap 仅对键进行排序,而不对值进行排序。

您可以通过多种方式找到解决方案。一种方法是返回使用 map,但存储 set 而不是字符串。通过这种方式,您可以对每组中的键和字符串进行排序。

int main()
{
map<int,set<string>> info;
char name[10000];
int age;

//Input till EOF
while (std::cin >> name >> age) {
info[age].insert(name);
}

// sorted output
map<int,set<string>>::iterator i;
for (i = info.begin(); i != info.end(); ++i)
{
set<string>::iterator j;
for (j = i->second.begin(); j != i->second.end(); ++j)
cout << *j << i->first << endl;
}
}

使用 set 的限制是 set 中的值必须是唯一的,所以如果你有两个名字和年龄相同的人,它就不会工作。如果这是一个问题,您可以更改为使用 multiset,或使用 list 并使用 std::sort 对列表进行一次所有排序名称已添加到其中。

关于c++ - 如何比较 multimap 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18003223/

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