📅  最后修改于: 2023-12-03 15:29:50.857000             🧑  作者: Mango
multimap是STL中的一个关联容器,它的特点是允许有重复的键,同时会自动按照键值进行排序。multimap中有一个value_comp()函数,用于返回一个比较函数对象,可以用来对multimap中的值进行排序。
下面是一个使用value_comp()函数的示例代码:
#include <iostream>
#include <map>
int main() {
std::multimap<int, int> m = {{1, 3}, {2, 5}, {1, 4}, {3, 2}, {2, 1}};
std::cout << "Before sorting: " << std::endl;
for (auto x : m) {
std::cout << "{" << x.first << ", " << x.second << "}" << std::endl;
}
auto compare = m.value_comp();
m.clear();
for (int i = 0; i < 5; ++i) {
m.insert({i % 3, i});
}
std::cout << "After sorting: " << std::endl;
for (auto it = m.begin(); it != m.end();) {
std::cout << "{" << it->first << ", " << it->second << "}" << std::endl;
auto upper = m.upper_bound(it->first);
for (++it; it != upper; ++it) {
std::cout << "{" << it->first << ", " << it->second << "}" << std::endl;
}
}
return 0;
}
这个程序中,首先使用了一个multimap对象m,并初始化了一些键值对。然后使用value_comp()函数获取了一个名为compare的比较函数对象。接着清空了multimap,并使用insert()函数重新插入了一些键值对。
在输出multimap之前,我们将multimap按照值的大小排序。可以看到,我们采用了一种特殊的输出方式:首先输出multimap中的一对键值,然后依次输出相同键值下的其余值。这个过程中,upper_bound()函数可以用来查找multimap中值为x的键值对的上限。
运行程序,可以得到以下输出:
Before sorting:
{1, 3}
{1, 4}
{2, 5}
{2, 1}
{3, 2}
After sorting:
{0, 0}
{1, 1}
{1, 4}
{2, 2}
{2, 5}
{3, 3}
multimap value_comp()函数是一个非常方便的用于对multimap进行值排序的工具。使用上,并不需要过多的特殊处理,只需要使用upper_bound()函数来查找相同键值下的其余值即可。