类别:容器 | 组件类型:类型 |
映射具有一个重要特性,即向map中插入新元素不会使指向现有元素的迭代器失效。从map中删除元素也不会使任何迭代器失效,当然,除了实际指向被删除元素的迭代器。
struct ltstr { bool operator()(const char* s1, const char* s2) const { return strcmp(s1, s2) < 0; } }; int main() { map<const char*, int, ltstr> months; months["january"] = 31; months["february"] = 28; months["march"] = 31; months["april"] = 30; months["may"] = 31; months["june"] = 30; months["july"] = 31; months["august"] = 31; months["september"] = 30; months["october"] = 31; months["november"] = 30; months["december"] = 31; cout << "june -> " << months["june"] << endl; map<const char*, int, ltstr>::iterator cur = months.find("june"); map<const char*, int, ltstr>::iterator prev = cur; map<const char*, int, ltstr>::iterator next = cur; ++next; --prev; cout << "Previous (in alphabetical order) is " << (*prev).first << endl; cout << "Next (in alphabetical order) is " << (*next).first << endl; }
参数 | 描述 | 默认值 |
---|---|---|
Key | 映射的键类型。这也定义为map::key_type. | |
Data | 映射的数据类型。这也定义为map::data_type. | |
Compare | 键比较函数,一个严格弱排序,其参数类型为key_type;它返回true如果其第一个参数小于第二个参数,否则返回false。这也定义为map::key_compare. | less<Key> |
Alloc | mapmap的分配器,用于所有内部内存管理。 | alloc |
成员 | 定义位置 | 描述 |
---|---|---|
key_type | 关联容器 | mapmap的键类型,Key. |
data_type | 配对关联容器 | 与键关联的对象的类型。 |
value_type | 配对关联容器 | 对象的类型,pair<const key_type, data_type>,存储在映射中。 |
key_compare | 有序关联容器 | 函数对象,用于比较两个键的顺序。 |
value_compare | 有序关联容器 | 函数对象,用于比较两个值的顺序。 |
pointer | 容器 | 指向T. |
reference | 容器 | 指向T |
const_reference | 容器 | 指向常量的引用T |
size_type | 容器 | 无符号整型。 |
difference_type | 容器 | 有符号整型。 |
iterator | 容器 | 用于遍历map. [1] |
const_iterator | 容器 | 用于遍历map. |
reverse_iterator | 可逆容器 | 用于反向遍历map. [1] |
const_reverse_iterator | 可逆容器 | 用于反向遍历map. |
iterator begin() | 容器 | 返回一个iterator指向映射开头的迭代器。map. |
iterator end() | 容器 | 返回一个iterator指向映射结尾的迭代器。map. |
const_iterator begin() const | 容器 | 返回一个const_iterator指向映射开头的迭代器。map. |
const_iterator end() const | 容器 | 返回一个const_iterator指向映射结尾的迭代器。map. |
reverse_iterator rbegin() | 可逆容器 | 返回一个reverse_iterator指向反转映射开头的迭代器。 |
reverse_iterator rend() | 可逆容器 | 返回一个reverse_iterator指向反转映射结尾的迭代器。 |
const_reverse_iterator rbegin() const | 可逆容器 | 返回一个const_reverse_iterator指向反转映射开头的迭代器。 |
const_reverse_iterator rend() const | 可逆容器 | 返回一个const_reverse_iterator指向反转映射结尾的迭代器。 |
size_type size() const | 容器 | 返回映射的大小。map. |
size_type max_size() const | 容器 | 返回映射的最大可能大小。map. |
bool empty() const | 容器 | true如果映射的大小为map00. |
key_compare key_comp() const | 有序关联容器 | 返回key_compare映射使用的map. |
value_compare value_comp() const | 有序关联容器 | 返回value_compare映射使用的map. |
map() | 容器 | 创建一个空的map. |
map(const key_compare& comp) | 有序关联容器 | 创建一个空的map,使用comp作为key_compare对象。 |
template <class InputIterator> map(InputIterator f, InputIterator l) [2] |
唯一有序关联容器 | 创建一个包含范围副本的映射。 |
template <class InputIterator> map(InputIterator f, InputIterator l, const key_compare& comp) [2] |
唯一有序关联容器 | 创建一个包含范围副本的映射,使用comp作为key_compare对象。 |
map(const map&) | 容器 | 复制构造函数。 |
map& operator=(const map&) | 容器 | 赋值运算符 |
void swap(map&) | 容器 | 交换两个映射的内容。 |
pair<iterator, bool> insert(const value_type& x) |
唯一关联容器 | 将x插入到map. |
iterator insert(iterator pos, const value_type& x) |
唯一有序关联容器 | 将x插入到map,使用pos作为插入位置的提示。 |
template <class InputIterator> void insert(InputIterator, InputIterator) [2] |
唯一有序关联容器 | 将一个范围插入到map. |
void erase(iterator pos) | 关联容器 | 删除pos. |
size_type erase(const key_type& k) | 关联容器 | 删除键为k. |
void erase(iterator first, iterator last) | 关联容器 | 删除范围内的所有元素。 |
void clear() | 关联容器 | 删除所有元素。 |
iterator find(const key_type& k) | 关联容器 | 查找键为k. |
const_iterator find(const key_type& k) const | 关联容器 | 查找键为k. |
size_type count(const key_type& k) | 唯一关联容器 | 统计键为k. |
iterator lower_bound(const key_type& k) | 有序关联容器 | 查找键不小于k. |
const_iterator lower_bound(const key_type& k) const | 有序关联容器 | 查找键不小于k. |
iterator upper_bound(const key_type& k) | 有序关联容器 | 查找键大于k. |
const_iterator upper_bound(const key_type& k) const | 有序关联容器 | 查找键大于k. |
pair<iterator, iterator> equal_range(const key_type& k) |
有序关联容器 | 查找包含所有键为k. |
pair<const_iterator, const_iterator> equal_range(const key_type& k) const |
有序关联容器 | 查找包含所有键为k. |
data_type& operator[](const key_type& k) [3] |
map | 参见下文。 |
bool operator==(const map&, const map&) |
前向容器 | 测试两个映射是否相等。这是一个全局函数,而不是成员函数。 |
bool operator<(const map&, const map&) |
前向容器 | 词典比较。这是一个全局函数,而不是成员函数。 |
成员函数 | 描述 |
---|---|
data_type& operator[](const key_type& k) [3] |
返回对与特定键关联的对象的引用。如果map尚不包含此类对象,operator[]则插入默认对象data_type(). [3] |
[1] Map::iterator不是可变迭代器,因为map::value_type不是可赋值的。也就是说,如果i的类型为map::iterator并且p的类型为map::value_type,则*i = p不是有效的表达式。但是,map::iterator也不是常量迭代器,因为它可以用来修改它指向的对象。使用与上面相同的符号,(*i).second = p是一个有效的表达式。同样的观点也适用于map::reverse_iterator.
[2] 此成员函数依赖于成员模板函数,目前(1998年初)并非所有编译器都支持。如果您的编译器支持成员模板,则可以使用任何类型的输入迭代器调用此函数。但是,如果您的编译器尚不支持成员模板,则参数必须是类型为const value_type*或类型为map::const_iterator.
[3] 由于operator[]可能会将新元素插入到map中,因此它不可能是const成员函数。请注意,operator[]的定义非常简单m[k]等价于(*((m.insert(value_type(k, data_type()))).first)).second。严格来说,此成员函数是不必要的:它只为了方便而存在。