多重集合(multiset)和多重映射(multimap)

首先看关联容器分类:
多重集合(multiset)和多重映射(multimap)_第1张图片
多重集合是允许有重复元素的集合,多重映射是允许一个键对应多个数据的映射。
示例代码:
#include
#include
#include
#include
using namespace std;
int main()
{
multimapcourses;//定义多重映射
typedef multimap::iterator Courseiteral;
courses.insert(make_pair(“C++”, “2-6”));
courses.insert(make_pair(“COMPILER”, “3-1”));
courses.insert(make_pair(“COMPILER”, “3-2”));
courses.insert(make_pair(“COMPILER”, “2-7”));
courses.insert(make_pair(“Qt”, “1-1”));
courses.insert(make_pair(“OS”, “4-2”));
string name;
int num;
do {
cin >> name;
num = courses.count(name);
if (num == 0)
cout << name << " don’t in courses" << endl;
} while (num == 0);
cout << num << " per week!" << endl;
pairrange;
range = courses.equal_range(name);
for (Courseiteral iter = range.first;
iter != range.second;
iter++)
{
cout << iter->second;
}
cout << endl;

system("pause");
return 0;

}
重点:
typedef multimap::iterator Courseiteral;此处定义了多重映射的迭代器。

STL中的equal_range算法返回一个pair类型的值range,
vector vec;
…//vec initialize
pair range;
range = equal_range(vec.begin(),vec.end(),value);
其中range.first是可以在不改变原来排序顺序的情况下的可以插入value的最小迭代器位置,
range.second是不改变原来排序顺序的情况下的可以插入value的最大迭代器位置.
实际情况是:如果vec中存在value,那么range.first就是vec中的指向第一个value位置的迭代器,而range.second则是vec中指向第一个大于value的值的位置的迭代器.
如果搜索值在容器中是最后一个值那么range.second就是container.end().当vec中没有value时,range返回一个0区间,
也就是range.first=range.second=指向vec中第一个值大于value的位置的迭代器(可能为vec.end,如果vec中所有值均小于value)。

你可能感兴趣的:(c++)