map、set详解

 一、基本分类

容器名称键(值对)是否唯一是否有序底层结构
map红黑树
set红黑树
multimap红黑树
multiset红黑树
unordered_map哈希表
unordered_set哈希表
unordered_multimap哈希表
unordered_multiset哈希表

二、详细说明

(一)map

        map是一个键值对(key – value)容器,key和value可以是任何数据类型,键是唯一的,按照键排序,底层是一颗红黑树,访问单个元素的速度为O(logN)

1.定义

map<int, int> m;
map<int, bool> m;
map<string, bool> m;

2.下标访问

map<char, int> m;
m['a'] = 1;
cout << m['a'] << endl;

3.范围遍历

map<char, int> m;
for (int i = 1; i <= 26; i++)
    m[i - 1 + 'a'] = i;
for (auto x : m)   
    cout << x.first << ' ' << x.second << endl;

4.常用函数

m.clear(); // 清空容器

cout << m.size() << endl; // 返回容器大小

auto p = m.find(666); // 指向容器中key为666的元素,如果没有该key将返回end()迭代器

cout << p->second << endl; // 输出key为666的value

m.insert({5, 10}); // 在容器中插入key为5,value为10的元素

m.erase(p); // 删除迭代器指向的元素

auto p = m.lower_bound(x);//返回一个指向第一个大于等于 x 的元素的迭代器。若无,返回end()迭代器。

auto p = m.upper_bound(x); // 返回一个指向第一个大于 x 的元素的迭代器。若无,返回end()迭代器。

(二)set

        集合,其特点是不会出现重复的内容,经常使用它去重,自动升序排序,底层是一颗红黑树,访问单个元素的速度为O(logN)

 1.定义

set<int> s;
set<string> s;

2.范围遍历

set<int> s;
for (int i = 1; i <= 10; i++)
    s.insert(i * 15); // 在集合中插入一个元素
for (auto x : s)
    cout << x << endl;

3.降序排序

set<int, greater<int>> s;

4.常用函数

s.clear(); // 清空容器

cout << s.size() << endl; // 返回容器大小

auto p = s.find(666); // 指向容器中值为666的元素,如果没有该值将返回end()迭代器

s.insert(5); // 在容器中插入元素

s.erase(p); // 删除迭代器指向的元素

auto p = s.lower_bound(x);//返回一个指向第一个大于等于 x 的元素的迭代器。若无,返回end()迭代器。

auto p = s.upper_bound(x); // 返回一个指向第一个大于 x 的元素的迭代器。若无,返回end()迭代器。

(三)multimap

        multimap 用法基本上和 map 是一样的,唯一的不同是:map 中的 key 是唯一的,而 multimap 中 key 是可以重复的。

1.定义

multimap<int, int> mm;
multimap<int, bool> mm;
multimap<char, int> mm;
multimap<string, int> mm;

(四)multiset

        multiset 用法基本上和 set 是一样的,唯一的不同是:set 中的元素是唯一的,而 multimap 中元素是可以重复的。

 1.定义

multiset<int> s;
multiset<string> s;

(五)unordered_map

        unordered_map与map使用方法一致,底层是哈希表,访问单个元素的速度为O(1)

 1.定义

unordered_map<int, int> m;
unordered_map<int, bool> m;
unordered_map<char, int> m;
unordered_map<string, int> m;

(六)unordered_set

        unordered_set与set使用方法一致,底层是哈希表,访问单个元素的速度为O(1)

1.定义

unordered_set<int> s;
unordered_set<string> s;

(七)unordered_multimap

        unordered_multimap与unordered_map使用方法一致,唯一的不同是:unordered_map 中的 key 是唯一的,而 unordered_multimap 中 key 是可以重复的。

 1.定义

unordered_multimap<int, int> m;
unordered_multimap<int, bool> m;
unordered_multimap<char, int> m;
unordered_multimap<string, int> m;

(八)unordered_multiset

  unordered_multiset与unordered_set使用方法一致,唯一的不同是:unordered_set 中的元素是唯一的,而 unordered_multiset 中元素是可以重复的。

 1.定义

unordered_multiset<int> s;
unordered_multiset<string> s;
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇