map

1.基本概念
map通过operate<()即less 比较元素,排列方式是平衡二叉树,查找元素复杂度log(n)

元素是以键的升序排列的,因为 map 中默认使用 less 函数对象对它们进行排序。

map元素是pair<constT,K>,键为常量不可修改

map迭代器可以++或者–,但是不可加减数字,需要用advance() std::advance(iter, 4); // begin iterator+ 4

count()参数键值,返回找到的个数0/1

map插入的对象的键如果是自己定义的类,则该类需要自定义operate<()

2.map创建:
{}初始化 map<int,string> m{{1,"A"},{2,"B"}};
make_pair()初始化 map<int,string> m{make_pair(1,"A")};
复制构造 map<string, size_t> personnel {people}
迭代器范围构造 map<string, size_t> personnel {begin(people),end(people)};

3.map插入:
(1)insert():
参数pair对象,返回一个 pair<iterator,bool> 对象。对象的成员 first 是一个迭代器,它要么指向插入元素,要么指向阻止插入的元素。second (布尔型)是返回对象,如果插入成功,返回值为 true,否则为 false。

ret_pr = people.insert(std::make_pair("Bill", 48));

pair()构造函数生成的对象作为参数,调用Insert的移动构造函数

ret_pr = people.insert(std::pair<const std::string, size_t> {"Bill", 48});

插入位置+pair对象作为参数

people.insert (ret_pr.first, std::make_pair ("Ian", 38));

初始化列表作为参数

crowd.insert({{"Bert", 44}, {"Ellen”, 99}});

(2)emplace:参数为对象的构造参数,直接构造

auto pr = people.emplace (Name { "Dan","Druff"},77);

emplace() 和 insert() 返回的 pair 对象提供的指示相同

emplace_hint() 提供一个指示元素生成位置的迭代器,如果新元素被插入,它返回的是指向新元素的迭代器;如果没有插入,返回的是和这个键匹配的现有元素的迭代器

auto pr = people.emplace(Name{"Dan","Druff"}, 77);
auto iter = people.emplace_hint (pr.first, Name {"Cal","Cutta"}, 62);

4.map元素获取
成员函数 at() 返回的是参数键对应的对象。如果这个键不存在,就会拋出 out_of_range 异常

auto value = people.at(key); //people为map,key为要查找的键

[]访问,参数为键,如果不存在则插入

auto value = people[Name {"Ned", "Kelly"}]; //值因为是int的,自动设为0

5.map删除元素
erase
(1)参数为键,移除键和参数匹配的元素,然后返回所移除元素的个数0/1

people.erase(name);

(2)参数为指向删除元素的迭代器,返回的迭代器指向被删除元素的下一个位置。

auto iter = people.erase(std::begin(people));

(3)移除两个迭代器参数所定义范围内的元素

auto iter = people.erase(++std::begin(people), --std::end(people));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值