目录
- 1 概述
- 2 使用实例
- 3 接口使用
-
- 3.1 construct
- 3.2 assigns
- 3.3 iterators
- 3.4 capacity
- 3.5 access
- 3.6 insert
- 3.7 erase
- 3.8 swap
- 3.9 clear
- 3.10 emplace
- 3.11 emplace_hint
- 3.12 key_comp
- 3.13 value_comp
- 3.14 find/count
- 3.15 upper_bound/upper_bound/equal_range
- 3.16 get_allocator
1 概述
映射是关联容器,存储由键值和映射值的组合组成的元素,遵循特定的顺序。
在映射中,键值通常用于对元素进行排序和唯一标识,而映射的值存储与该键关联的内容。键和映射值的类型可能不同,并在成员类型value_type中分组在一起,该类型是将两者组合在一起的对类型:
typedef pair<const Key,T> value_type;
在内部,映射中的元素总是按照其键进行排序,遵循由其内部比较对象(类型为Compare)指示的特定严格弱排序标准。
map容器通过关键字访问单个元素的速度通常unordered_map容器慢,但它们允许根据子集的顺序直接迭代。
映射中的映射值可以通过使用括号运算符(operator[])的相应键直接访问。
映射通常被实现为二叉搜索树
其类图如下:
2 使用实例
void MapSuite::find()
{
std::map<char, int> a = {
{
'e', 50 }, {
'a', 10 }, {
'b', 20 }, {
'c', 30 }, {
'd', 40 } };
auto it = a.find('e');
TEST_ASSERT_EQUALS('e', it->first)
TEST_ASSERT_EQUALS(50, it->second)
it = a.find('h');
TEST_ASSERT_EQUALS(true, it == a.end())
}
void MapSuite::count()
{
std::map<char, int> a = {
{
'e', 50 }, {
'a', 10 }, {
'b', 20 }, {
'c', 30 }, {
'd', 40 } };
TEST_ASSERT_EQUALS(1, a.count('e'))
TEST_ASSERT_EQUALS(0, a.count('h'))
}
3 接口使用
3.1 construct
namespace helper_of_map {
bool function_compare(char l, char r) {
return l < r; }
struct object_compare
{
bool operator()(const char& l, const char& r) {
return l < r; }
};
}
void MapSuite::construct()
{
std::map<char, int> a;
std::map<char, int> b = {
{
'a', 10 }, {
'b', 20 }, {
'c', 30 }, {
'd', 40 }, {
'e', 50}};
std::map<char, int> c(b.begin(), b.end());
std::map<char, int> d(b);
std::map<char, int> e({
{
'a', 10 }, {
'b', 20 }, {
'c', 30 }, {
'd', 40 }, {
'e', 50 } , {
'a', 10 } });
std::map<char, int, helper_of_map::object_compare> f;
std::map<char, int, bool(*)(char, char)> g(helper_of_map::function_compare);
TEST_ASSERT_EQUALS(true, a.empty())
TEST_ASSERT_EQUALS(5, b.size())
TEST_ASSERT_EQUALS(5, c.size())
TEST_ASSERT_EQUALS(5, d.size())
TEST_ASSERT_EQUALS(5, e.size())
TEST_ASSERT_EQUALS(true, f.empty())
TEST_ASSERT_EQUALS(true, g.empty())
}
说明:
- 构造时可以指定函数对象作为比较函数
- 构造时可以指定函数指针作为比较函数
3.2 assigns
void MapSuite::assigns()
{
std::map<char, int> a = {
{
'a', 10 }, {
'b', 20 }, {
'c', 30 }, {
'd', 40 }, {
'e', 50 }, {
'e', 60 } };
std::map<char, int> b;
std::map<char, int> c;
std::map<char, int>