关联容器的使用
map容器的使用
//初始化列表法
map<string, size_t> word_count = { {"test1",1},{"test2",2},{"test0",0} };
//直接赋值法
word_count[string("abc")] = 3;
word_count[string("defg")] = 4;
//插值法
word_count.insert({ string("abc1"), 5});
word_count.insert(make_pair(string("defg1"), 6));
word_count.insert(pair<string, int>(string("hijk"), 7));
for (const auto& w : word_count)
{
cout << w.first << " occurs " << w.second << endl;
}
对应着的代码结果输出如下:map中以key为排序列。及程序中的string类型为排序依据。
pair类型
pair<string, string> p;
pair<int, string> ptest(3, "test");
pair<int, string> pstr = { 2,"test2" };
auto pmake = make_pair(3, "test3");
auto pf=pmake.first;//pf=3
auto pse = pmake.second;//pse=test3字符串
auto bCompare = ptest < pstr;//false
ptest.first = 2;
bCompare = ptest < pstr;//true
在使用比较运算符时第一个参数相等时则根据第二个参数的结果来进行比较,如果第一个参数不相等为相应的判断结果。
关联容器操作
关联容器额外的类型别名 | 类型别名描述 |
---|---|
key_type | 此容器类型的关键字类型 |
mapped_type | 关键字关联的类型:只适用于map |
value_type | 对于set,与key_type相同 ; 对于map,为pair<const key_type,mapped_type> |
set<string>::value_type v1;//v1是一个string
set<string>::key_type v2;//v2是一个string
map<string, int>::value_type v3;//v3是一个pair<const string,int>
map<string, int>::key_type v4;//v4是一个string
map<string, int>::mapped_type v5;//v5是一个int(只有map类型才定义了mapped_type)
map<string, int> word_count{ {"test1",1},{"test2",2},{"test3",3} };
auto map_it = word_count.begin();
//*map_it是一个指向pair<const string,size_t>对象的引用
cout << map_it->first << " " << map_it->second;
//map_it->first = "new key";//错误关键字是const
++map_it->second;//第一个key:test1 的关联值变为2
set的迭代器是const的
set<int> iset = { 0,1,2,3,4,5,6,7,8,9 };
set<int>::iterator set_it = iset.begin();
//*set_it = 42;error set中的关键字是const只读属性
cout << *set_it << endl;
unordered_map<int, int> iset = { {1,1},{2,2},{3,3} };
auto te = iset.find(2);
iset.erase(iset.begin(),te);//容器剩余元素为{2,2}{3,3}
map的下标操作
map和unordered_map容器提供了下标运算符和一个对应的at函数;set类型不支持下标,multimap或unordered_multimap不能进行下标操作。map下标运算接受一个索引(即一个关键字),获取此关键字相关联的值。
map<string, size_t> word_count;
word_count["Anna"] = 1;
//在word_count中搜索关键字为Anna的元素未找到
//将一个新的关键字-值对插入到word_count中。关键字是一个const string,保存Anna。值进行初始化。
//提取出新插入的元素,并将值1赋予它
下标运算符可能插入一个新元素,仅对非const的map下标操作。使用不在容器中的关键字作为下标,会添加一个具有此关键字的元素到map中。
map和unordered_map的下标操作 | 含义描述 |
---|---|
c[k] | 返回关键字为k的元素;如果k不在c中,添加一个关键字为k的元素,对其值进行初始化 |
c.at(k) | 访问关键字为k的元素,带参数检查;若k不在c中,抛出一个out_of_range异常 |