天天看点

STL关联容器set、multimap基本用法1(C++)

STL具有容器概念和容器类型。概念是具有名称(如容器、序列容器、关联容器等)的通用类别;容器类型时可用于创建具体容器对象的模板。旧的容器有11个,分别为deque、list、queue、priority_queue、stack、vector、map、multimap、set、multiset和bitset。

博主主要总结的是关联容器set和multimap基本用法,其它容器的原理和用法可以参考《C++ Primer Plus》(第6版)中文版第695-706页。

一、关联容器set

1.1 set原理

STL set模拟了多个概念,是关联集合,可反转、排序,键值是唯一的,不能存储多个相同的值,并且会自动排序(关联容器特性之一),用法跟vector容器类似。

#include <set>		//STL容器之一
using namespace std;

set<string> A;
           

1.2 set用法示例(关联容器自动排序容器内对象的值)

#include <iostream>
#include <string>
#include <iterator>
#include <algorithm>
#include <set>		//STL容器之一

using namespace std;

int main()
{
	/*遍历和输出关联容器的值*/
	string s1[3] = { "str3", "str2", "str1" };
	set<string> A(s1,s1+3);	//定义并且初始化容器set	
	ostream_iterator<string, char> out(cout, " ");
	copy(A.begin(), A.end(), out);
	cout << endl;

	/*输出两个关联容器并集合的值*/
	string s2[3] = { "str0", "str5", "str3" };
	string s3[3] = { "str9", "str5", "str1" };
	set<string> A1(s2, s2 + 3);	//定义并且初始化容器set	
	set<string> B(s3, s3 + 3);	//定义并且初始化容器set	
	set<string> C;	
	cout << endl;
	set_union(A1.begin(), A1.end(), B.begin(), B.end(), insert_iterator<set<string>>(C,C.begin()));
	copy(C.begin(), C.end(), out);
	cout << endl;

	system("pause");
	return 0;
}
           
STL关联容器set、multimap基本用法1(C++)

二、关联容器multimap

1.1 multimap原理

容器multimap跟set相似,也是可反转、经过排序的关联容器,但是键和值的类型不同,且同一个键可能有多个值相关联。下面是声明:

#include <map>		//STL容器之一
using namespace std;

multimap<int, string> codes;

pair<const int, string> item(123, "city");
codes.insert(item);

//匿名创建pair对象
codes.insert(pair<const int, string>(124, "city124"));	
           

上述声明中,容器codes里面每个对象的值的类型为pair<class T,class U>,也就是pair<const int,string>。

1.2 multimap用法示例(关联容器自动排序容器内对象的值)

#include <iostream>
#include <string>
#include <iterator>
#include <algorithm>
#include <set>		//STL容器之一
#include <map>

using namespace std;

int main()
{
	multimap<int, string> codes;
	pair<const int, string> item(123, "city");
	codes.insert(item);

	//匿名创建pair对象
	codes.insert(pair<const int, string>(124, "city124"));	

	//pair<multimap<int, string>::iterator, multimap<int, string>::iterator> range = codes.equal_range(124);

	//auto range的类型为:  pair<multimap<int, string>::iterator, multimap<int, string>::iterator> range
	auto range = codes.equal_range(124);
	for (auto it = range.first; it != range.second; ++it)
		cout << "(*it).first==" << (*it).first << "\t(*it).second==" << (*it).second << endl;

	cout << endl;

	system("pause");
	return 0;
}
           
STL关联容器set、multimap基本用法1(C++)

参考内容:

《C++ Primer Plus》(第6版)中文版  695页,702-706页

继续阅读