Sword STL之map效率问题

Posted zhanggaofeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sword STL之map效率问题相关的知识,希望对你有一定的参考价值。

#include <iostream>
#include <map>
#include <vector>

using namespace std;

/*
STL容器类都有一个内置数据类型 value_type 
value_type本质上就是模板类型
例如:
vector<int> v1;
vector<int>::value_type x;  //定义x变量,x的数据类型就是int

在map关联容器类型中,执行更新操作时,map::operator[]效率更高
执行新元素插入操作时,map-insert效率更高
*/

template<typename MapType, typename KeyArgType, typename ValueArgtype>
typename MapType::iterator efficientUpdate(MapType& m, const KeyArgType& k, const ValueArgtype& v)
{
    typename MapType::iterator it = m.lower_bound(k);

    if ((it != m.end()) && !(m.key_comp()(k, it->first)))
    {
        //update
        it->second = v;
        return it;
    }
    else
    {
        //add
        typedef typename MapType::value_type MVT;
        return m.insert(it, MVT(k, v));
    }
}


void test()
{
    map<int, int> m1;

    for (int i = 0; i < 10; i++)
    {
        efficientUpdate<map<int, int>, int, int>(m1, i, i * 2);
    }

    map<int, int>::iterator it;
    for (it = m1.begin(); it != m1.end(); ++it)
    {
        cout << it->first << ":" << it->second << endl;
    }
}

int main()
{
    test();
    getchar();
    return 0;
}

 

以上是关于Sword STL之map效率问题的主要内容,如果未能解决你的问题,请参考以下文章

Sword STL迭代器prev,next相关函数

Sword STL仿函数示例

STL 之 hash_map源代码剖析

Sword STL之仿函数概念介绍

C++STL之map和set的使用

C++STL之map和set的使用