集合set和映射map(哈希表)

集合set

无序集合unordered_set(要包含头文件unordered_set)

定义:unordered_set<int>
插入:s.insert(key)
查找:s.find(key)(返回的是目标元素的迭代器,若没找到返回end())
统计:s.count(key)统计key的个数</int>

有序集合set(要包含头文件set)

注意:默认排序是从小到大,如果要从大到小,需要自己利用仿函数构造(类)比较器,在定义set的时候在尖括号里加上比较器的名称
如果是自定义数据类型,则必须加比较器,否则编译器不知道如何进行排序
[定义比较器时]一定要加两个const

class myCompare
{
public:
    bool operator()(const Node& node1,const Node& node2) const
    {
        return node1.m_data > node2.m_data;
    }
};
set<Node,myCompare> s;

映射map

无序映射unordered_map(要包含头文件unordered_map)

定义:unordered_map<int,string>
插入:m.insert(make_pair(key,value))
查找:m.find(key)
统计:m.count(key)
取元素:key是it->first,value是it->second

有序映射map(要包含头文件map)

注意:默认排序是按照key从小到大,如果要从大到小,需要自己利用仿函数构造(类)比较器,在定义set的时候在尖括号里加上比较器的名称
如果是自定义数据类型,则必须加比较器,否则编译器不知道如何进行排序

class myCompare2
{
public:
    bool operator()(const Node& node1, const Node& node2) const
    {
        return node1.m_data > node2.m_data;
    }
};
    map<Node, int,myCompare2> m;
    Node node1(17, "mao");
    Node node2(21, "xin");
    Node node3(23, "qing");
    Node node4(34, "yu");
    Node node5(25, "hang");
    m.insert(make_pair(node1, 95));
    m.insert(make_pair(node2, 92));
    m.insert(make_pair(node3, 91));
    m.insert(make_pair(node4, 87));
    m.insert(make_pair(node5, 84));
    for (map<Node, int, myCompare2>::iterator it = m.begin(); it != m.end(); it++)
    {
        cout << "年龄: " << it->first.m_data << "姓名:" << it->first.m_name << "分数:" << it->second << endl;
    }
全部评论

相关推荐

冷艳的小师弟在看机会:jd测评乱点直接被挂了,哭死~
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务