1 key/value 必需具备assignable 可赋值 copyable 可复制
key被视为常数,元素实质型别pair<const key, T>, 不可调用变动性算法,如remove(),remove()实质上是以一个参数覆盖被移除的元素
map移除操作只能使用map提供的成员函数
2 对排序准则 key 必需是comparable 可比较
3 构造/析构函数
map c; 空map
map c(op); (op排序准则)
map c1(c2); c2副本
map c(begin, end)
map c(begin, end, op)
c.~map();
4 排序准则定义
(1) template 参数定义 std::map<float, std::string, std::greater<float> > coll;
(2) 构造函数参数定义
5 非变动性操作
key value 排序准则 必需具有相同的型别
c.size();
c.empty();
c.max_size();
c1==c2; c1!=c2; c1<c2; c1>c2; c1<=c2; c1>=c2;
count(key)
find(key) 不能find()搜索某特定value的元素,可改用通用算法find_if() 或者利用find(key)写显示循环
low_bound(key)
upper_bound(key)
equal_bound(key) 返回键值==key 的元素区间
c1=c2; //复制操作型别必需相同,排序准则可以不同 准则本身被赋值或交换
c1.swap(c2);
swap(c1,c2);
迭代器相关操作函数
c.begin() c.end(); c.rbegin(); c.rend();
安插移除
c.insert(elem) 不论是否成功返回插入元素位置
c.insert(pos, elem) 指出安插操作搜寻起点
c.insert(begin, end) 将[begin, end]安插入c,无返回值
c.erase(elem) 移除value==elem的所有元素,返回移除个数
c.erase(pos) 无返回值
c.erase(begin, end) 无返回值
c.clear();
安插 记住key视为常数,必需提供正确型别或提供隐式或显式转换,三种方法将value传入map:
(1) value_type: coll.insert(std::map<std::string, float>::value_type("otto", 22.3));
(2) pair<>: std::map<std::string, float> coll;
coll.insert(std::pair<std::string, float>("otto", 22.3));
coll.insert(std::pair<const std::string, floar>("otto", 22.3));
(3) make_pair: std::map<std::string, float> coll;
coll.insert(std::make_pair("otto", 22.3));
正确的移除操作,注意:对pos所指元素实施erase() 会使pos不再成为一个有效的coll迭代器;
typedef std::map<std::string, float> string_float_map;
string_float_map coll;
string_float_map::iterator pos;
for(pos=coll.begin(); pos!=coll.end; )
{
if(pos->second==value)
{
coll.erase(pos++);
}
else
{
++pos;
}
}
6 map视为关联数组 associated array
map[key] 返回一个reference,如果元素不存在,就安插该元素

浙公网安备 33010602011771号