map/multimap

本文详细介绍了C++中的map和multimap容器,包括它们的特性(唯一性和排序)、初始化、操作方法(如查找、插入和删除)、迭代器使用以及multimap的独特性。通过实例演示了如何在实际开发中使用这些数据结构进行高效的数据存储和查找。
摘要由CSDN通过智能技术生成

map/multimap

1.特性
    map保证出现在map内的pair只出现一次,且map内的元素按照first从小到大排序,但是当first相同时,那么按照输入的顺序排序
2.初始化
①初始化一个映射

map<int, int> m;

②复制一个映射

map <int ,int > mm(m);

3.求长度(时间复杂度为O(1))

m.size();

4.判空(时间复杂度为O(1))

a.empty();

5.清空

a.clear();

6.删除元素/插入元素

a.erase(1);  // 删除first为1的那个值   ,时间复杂度为O(logn )
a.erase(a.begin());  // 删除map的第一个元素
a.insert({1, 2});  // 插入一个pair
a[1] = 2;  // 插入一个pair,时间复杂度为O(logn)

7.判断一个数是否出现过

a.count(x);  // 判断x是否在集合中出现过,如果出现过返回1,否则0

8.迭代器

a.begin();  // 第一个元素的迭代器
a.end();  // 最后一个元素的下一位的迭代器

9.遍历

// 1.迭代器遍历
for (map<int,int>::iterator it = m.begin(); it != m.end(); ++it)
    cout << (*it).second << ends;

// 2. c++方式遍历
for (auto mi: m) cout << mi.second << ends;

10.查找(支持lower_bound() 和 upper_bound()操作)

map<int, int> s;
s[1] = 2;
S[2] = 3;
map <int> ::iterator it = m.lower_bound(2);
if (it != m.end()) cout << *it;
else cout << 0;

11.multimap的性质和map一样,上面全是map的特性,而multimap在map的特性之上使得一个集合内可以出现多次同一个元素,multimap内的元素也是按照字典序排好序的

multimap<int, int> m;
m.insert({1, 2});
m.insert({1, 3});
for (auto mi: m)
     cout << mi.second << ends;

输出

2 3

在s.erase(int x)时,会删除所有出现的x,时间复杂度为O(logn + k) (k为出现次数)

multimap<int, int> m;
m.insert({1, 4});
m.insert({1, 3});
m.insert({1, 5});
m.erase(1);
cout << m.empty();

输出

1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++ STL中的mapmultimap是关联容器,用于存储键值对(key-value pairs),其中每个键(key)唯一对应一个值(value)。 map是一个有序容器,根据键的大小进行自动排序,默认按照键的升序进行排序。每个键只能在map中出现一次,如果尝试插入具有相同键的元素,新元素将替代旧元素。 multimap也是一个有序容器,与map不同的是,它允许多个具有相同键的元素存在。多个具有相同键的元素将按照插入的顺序进行存储,而不会自动排序。 这两个容器都提供了一系列的操作函数,如insert、erase、find等,用于插入、删除和查找元素。 以下是一个使用map的简单示例: ```cpp #include <iostream> #include <map> int main() { std::map<std::string, int> scores; scores.insert(std::make_pair("Alice", 90)); scores.insert(std::make_pair("Bob", 80)); scores.insert(std::make_pair("Charlie", 70)); // 查找并输出Bob的分数 std::cout << "Bob's score: " << scores["Bob"] << std::endl; // 遍历并输出所有键值对 for (const auto& pair : scores) { std::cout << pair.first << ": " << pair.second << std::endl; } return 0; } ``` 上述示例中,我们创建了一个存储string类型键和int类型值的map容器scores。通过insert函数依次插入了三个键值对。然后我们通过scores["Bob"]来获取Bob的分数,并输出结果为80。 接着我们使用范围-based for循环遍历map中的所有键值对,并输出每个键值对的键和值。 multimap的用法与map类似,只是它允许多个具有相同键的元素存在。 这些关联容器在查找和插入操作上具有较高的效率,特别适用于需要根据键进行快速查找的场景。在实际应用中,你可以根据自己的需求选择适合的容器类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值