Bootstrap

【OJ】STL——unordered_map/unordered_set

今天打算看一下unordered_map/unordered_set相关接口的使用,这两个函数的底层是用“哈希表+红黑树”,所以相比较map/set,它的查找速率更快,但这两个函数实在C++11中加入的所以有些环境下不能用


同样,这两个函数的接口很多,但我们一般用哈希表就是为了迅速的查找,所以只看常用的几个,用法其实和map/set相似

1、insert
    unordered_map<string, int> mymap;
    unordered_map<string, int> temp = { { "张三", 1 }, {"李四",5} };

    //插入一个值
    mymap.insert(make_pair("王麻子 ",2));
    //插入一个区间
    mymap.insert(temp.begin(), temp.end());
2、operator[ ]
    //添加
    mymap["小明"] = 6;
    //修改
    mymap["张三"] = 0;

    //赋值
    mymap["王麻子"] = mymap["小明"];
3、find
    //查找(返回迭代器)
    unordered_map<string,int>::iterator it=mymap.find("张三");
    cout <<it->first<<":"<< it->second << endl;

    it = mymap.find("李华");
    if (it == mymap.end())
    {
        cout << "没找到" << endl;
    }

测试列子:

int main()
{
    unordered_map<string, int> mymap;
    unordered_map<string, int> temp = { { "张三", 1 }, {"李四",5} };

    //插入一个值
    mymap.insert(make_pair("王麻子 ",2));
    //插入一个区间
    mymap.insert(temp.begin(), temp.end());

    //添加
    mymap["小明"] = 6;
    //修改
    mymap["张三"] = 0;

    //赋值
    mymap["王麻子"] = mymap["小明"];

    //查找
    unordered_map<string,int>::iterator it=mymap.find("张三");
    cout <<it->first<<":"<< it->second << endl;

    //找不到时
    it = mymap.find("李华");
    if (it == mymap.end())
    {
        cout << "没找到" << endl;
    }

    cout << endl;

    //打印mymap
    for (auto& x : mymap)
    {
        std::cout << x.first << ": " << x.second << std::endl;
    }

    system("pause");
    return 0;
}

这里写图片描述

;