如何比较多图中的VALUE

时间:2013-08-01 19:49:04

标签: c++ stl multimap strcmp

我学会了多重映射是<key,value>对,它允许重复键(与地图不同)。 帮我按(自动发生)然后按 value (即名称)对多图表进行排序。

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;
}

输入:

DUCHESS 26
玛丽8
BERLIOZ 8
TOULOUSE 7
THOMAS 28

输出:
TOULOUSE 7
BERLIOZ 8
玛丽8
DUCHESS 26
THOMAS 28

这里的年龄(整数)是键,因此它首先按年龄排序,但如果两个或更多年龄与BERLIOZ和MARIE相同,则需要在MARIE之前打印BERLIOZ,因为 B按字母顺序优于M

1 个答案:

答案 0 :(得分:2)

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对列表进行排序。