目录
一、pair和make_pair
1. pair
2. make_pair
二、set
(一)set的模板参数列表
(二)set的构造
(三)set的插入
1. 测试1
2. 测试2
(四)low_bound和upper_bound(上/下边界)
(五)查找指定元素的范围(区间)
三、multiset
(一)介绍
(二)查找find
(三)删除erase
(四)查找特定值的范围(equal_range)
(五)计算指定值出现次数count
四、map
(一)map的模板参数列表
(二)插入insert
(三)operator[]
(四)统计次数
1. 方式一
2. 方式二
template struct pair;
make_pair
是一个函数模板,可以让编译器根据参数自动确定类型template
pair make_pair (T1 x, T2 y);
#include
using namespace std;
int main() {
int x = 10;
double y = 3.14;
pair myPair = make_pair(x, y);
cout << "First element: " << myPair.first << endl;//10
cout << "Second element: " << myPair.second << endl;//3.14
return 0;
}
pair insert (const value_type& val);
iterator insert (iterator position, const value_type& val);
template
void insert (InputIterator first, InputIterator last);
#include
#include
using namespace std;
void test1()
{
sets;
s.insert(1);
s.insert(9);
s.insert(4);
s.insert(7);
s.insert(3);
set::iterator it = s.begin();
while (it != s.end())
{
cout << *it << " ";
it++;
}
cout << endl;
}
int main()
{
test1();//1 3 4 7 9
return 0;
}
#include
#include
using namespace std;
void test1()
{
sets;
s.insert(1);
s.insert(9);
s.insert(4);
s.insert(7);
s.insert(3);
pair::iterator, bool> ret = s.insert(7);
cout << ret.second << endl;
}
int main()
{
test1();//0,表示插入7失败了
return 0;
}
iterator lower_bound (const value_type& val) const;//返回大于等于val值位置的iterator
iterator upper_bound (const value_type& val) const;//返回大于val值位置的iterator
#include
#include
using namespace std;
void print(const set& s)
{
set::iterator it = s.begin();
while (it != s.end())
{
cout << *it << " ";
it++;
}
cout << endl;
}
void test()
{
set s;
for (int i = 0; i < 10; i++)
{
s.insert(i + 4);
}
print(s);//4 5 6 7 8 9 10 11 12 13
set::iterator itlow = s.lower_bound(7);//>= val值位置的iterator
set::iterator itup = s.upper_bound(11);//> val值位置的iterator
cout << "*itlow: " << *itlow << " *itup: " << *itup << endl;//7 12
s.erase(itlow, itup);
print(s);//4 5 6 12 13
}
int main()
{
test();
return 0;
}
pair equal_range (const value_type& val) const;
#include
#include
using namespace std;
void test()
{
set mySet = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
pair::iterator,set::iterator> range = mySet.equal_range(4);
cout << *(range.first) << endl;//4
cout << *(range.second) << endl;//5
}
int main()
{
test();
return 0;
}
template < class T, // multiset::key_type/value_type
class Compare = less, // multiset::key_compare/value_compare
class Alloc = allocator > // multiset::allocator_type
> class multiset;
iterator find (const value_type& val) const;
#include
#include
using namespace std;
void print(const multiset& s)
{
set::iterator it = s.begin();
while (it != s.end())
{
cout << *it << " ";
it++;
}
cout << endl;
}
void test()
{
multisets;
s.insert(1);
s.insert(6);
s.insert(2);
s.insert(2);
s.insert(2);
s.insert(8);
s.insert(7);
s.insert(5);
s.insert(11);
print(s);// 1 2 2 2 5 6 7 8 11
multiset ::iterator it = s.find(2);
while (it != s.end())
{
cout << *it << " ";
it++;
}
//2 2 2 5 6 7 8 11
}
int main()
{
test();
return 0;
}
void erase (iterator position);
size_type erase (const value_type& val);//删除所有等于 key 的元素,并返回删除的元素数量。
void erase (iterator first, iterator last);
#include
#include
using namespace std;
void print(const multiset& s)
{
set::iterator it = s.begin();
while (it != s.end())
{
cout << *it << " ";
it++;
}
cout << endl;
}
void test()
{
multisets;
s.insert(1);
s.insert(6);
s.insert(2);
s.insert(2);
s.insert(2);
s.insert(8);
s.insert(7);
s.insert(5);
s.insert(11);
print(s);// 1 2 2 2 5 6 7 8 11
size_t n =s.erase(2);
print(s);//1 5 6 7 8 11
cout << n;//3(删除2的数量为3)
}
int main()
{
test();
return 0;
}
pair equal_range (const value_type& val) const;
#include
#include
using namespace std;
void print(const multiset& s)
{
set::iterator it = s.begin();
while (it != s.end())
{
cout << *it << " ";
it++;
}
cout << endl;
}
void test()
{
multisets;
s.insert(1);
s.insert(6);
s.insert(2);
s.insert(2);
s.insert(2);
s.insert(8);
s.insert(7);
s.insert(5);
s.insert(11);
print(s);// 1 2 2 2 5 6 7 8 11
pair::iterator, set::iterator> ret = s.equal_range(2);
s.erase(ret.first, ret.second);
print(s);//1 5 6 7 8 11
}
int main()
{
test();
return 0;
}
size_type count (const value_type& val) const;
#include
#include
using namespace std;
void print(const multiset& s)
{
set::iterator it = s.begin();
while (it != s.end())
{
cout << *it << " ";
it++;
}
cout << endl;
}
void test()
{
multisets;
s.insert(1);
s.insert(6);
s.insert(2);
s.insert(2);
s.insert(2);
s.insert(8);
s.insert(7);
s.insert(5);
s.insert(11);
print(s);// 1 2 2 2 5 6 7 8 11
cout << "2出现次数:"<
template < class Key, // map::key_type
class T, // map::mapped_type
class Compare = less, // map::key_compare
class Alloc = allocator > // map::allocator_type
> class map;
pair insert (const value_type& val);
iterator insert (iterator position, const value_type& val);
template
void insert (InputIterator first, InputIterator last);
#include
#include
mapped_type& operator[] (const key_type& k);//k 是要访问或插入的键值对的键
#include
#include
void test()
{
string arr[] = { "苹果", "西瓜", "苹果", "西瓜", "苹果", "苹果", "西瓜", "苹果", "香蕉", "苹果", "香蕉" };
map countMap;
for (auto& str : arr)
{
auto ret = countMap.find(str);
if (ret == countMap.end())
{
// 没有表示第一次出现,插入
countMap.insert(make_pair(str, 1));
}
else
{
// 次数++
ret->second++;
}
countMap[str]++;
}
print(countMap);
}
#include
#include