set与multiset 都是C++ 中的集合类,不同的是set中不允许存在重复元素,而multiset允许存在重复元素。
cplusplus网站列出了两个类的成员函数:
begin
返回容器首元素指针 (public 成员函数 )
end
返回容器尾元素指针 (public 成员函数)
rbegin
返回容器反向迭代首元素指针(public 成员函数 )
rend
返回容器反向迭代尾元素指针 (public 成员函数 )
cbegin
返回 const_iterator迭代首元素指针 (public 成员函数 )( const_iterator指向的元素不可改变)
cend
返回const_iterator迭代尾元素指针 (public 成员函数 )
crbegin
返回const_reverse_iterator 反向迭代首元素指针 (public 成员函数 )
crend
返回const_reverse_iterator反向迭代尾元素指针 (public 成员函数 )
empty
检测容器是否为空 (public 成员函数 )
size
返回容器长度 (public 成员函数 )
max_size
返回最大长度 (public 成员函数 )
修改:
insert
插入元素 (public 成员函数 )
erase
清除元素 (public 成员函数 )
swap
交换集合元素 (public 成员函数 )
clear
清除集合元素 (public 成员函数 )
emplace
构建容器并插入某个元素 (public 成员函数 )
emplace_hint
构建容器并插入指定元素 (public成员函数 )
观测:
key_comp
返回比较结果 (public member function )
value_comp
返回比较结果 (public member function )
操作:
find
查找容器中元素(public member function )
count
根据查找关键字查找元素下标 (public member function )
lower_bound
返回容器某个元素低界(public member function )
upper_bound
返回容器某个元素上界(public member function )
equal_range
返回容器中相同元素的范围 (public member function )
实例代码如下:
#include <iostream>
#include <set>
int main ()
{
std::multiset<int> mymultiset;
for (int i=0; i<5; i++) mymultiset.insert(i);
std::multiset<int>::key_compare mycomp = mymultiset.key_comp();
std::cout << "mymultiset contains:";
int highest = *mymultiset.rbegin();
std::multiset<int>::iterator it = mymultiset.begin();
do {
std::cout << ' ' << *it;
} while ( mycomp(*it++,highest) );
std::cout << '\n';
return 0;
}
输出:
mymultiset contains: 0 1 2 3 4
类成员函数可以直接调用。
需要注意的是begin()和end()函数
begin()函数返回的是容器的第一个元素,end()返回的容器中元素的个数,即容器的尾部是容器内有效元素的个数,不知道这样理解对不对,代码展示如下:
#include <iostream>
#include <set>
using namespace std;
int main ()
{
std::multiset<int> myset;
std::multiset<int>::iterator itlow,itup;
for (int i=1; i<10; i++) myset.insert(i*10); // 10 20 30 40 50 60 70 80 90
cout<<"begin()"<<*myset.begin()<<" end() "<<*myset.end()<<endl;
std::cout << "myset contains:";
for (std::set<int>::iterator it=myset.begin(); it!=myset.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
输出如下:
另外一个注意的是lower_bound(element)是容器中大于等于element的元素迭代器指针,upper_bound(element)是容器中大于element的元素迭代器指针。
代码展示如下:
#include <iostream>
#include <set>
using namespace std;
int main ()
{
std::multiset<int> myset;
std::multiset<int>::iterator itlow,itup;
for (int i=1; i<10; i++) myset.insert(i*10); // 10 20 30 40 50 60 70 80 90
itlow=myset.lower_bound (30); // ^
itup=myset.upper_bound (40); // ^
cout<<*itlow<<" "<<*itup<<endl;
//cout<<"begin()"<<*myset.begin()<<" end() "<<*myset.end()<<endl;
std::cout << "myset contains:";
for (std::set<int>::iterator it=myset.begin(); it!=myset.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
输出:
附cplusplus网址:http://www.cplusplus.com/reference/set/multiset/