📜  C++ STL中的multimap value_comp()函数(1)

📅  最后修改于: 2023-12-03 15:29:50.857000             🧑  作者: Mango

C++ STL中的multimap value_comp()函数

简介

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()函数来查找相同键值下的其余值即可。