本篇学习set的添加和观察器操作,具体的API函数如下:
插入元素或结点 (C++17 起) (公开成员函数) | |
(C++11) | 原位构造元素 (公开成员函数) |
(C++11) | 使用提示原位构造元素 (公开成员函数) |
key_comp | 返回用于比较键的函数 (公开成员函数) |
value_comp | 返回用于在value_type类型的对象中比较键的函数。 (公开成员函数) |
代码如下:
#include <set>
#include <string>
#include <time.h>
#include <iostream>
using namespace std;
void insertOperator()
{
const int count = 10000;
set<string> set1;
cout << "set1.size = " << set1.size() << " set1.empty = " << set1.empty() << " set1.max_size = " << set1.max_size() << endl;
//1.insert 插入元素或结点
double startTime1 = clock();//1计算开始
for(int i = 0; i < count; i++)//214748
{
set1.insert("Generalization" + std::to_string(i));
}
double endTime1 = clock();//1时间结束
cout << "set1.size = " << set1.size() << " 1 run time is: " << (double)(endTime1 - startTime1) / CLOCKS_PER_SEC << "s" << endl;
cout << endl;
//set1.clear();
//2.emplace原位构造元素
set<string> set2;
double startTime2 = clock();//2计算开始
for(int i = 0; i < count; i++)//214748
{
set2.emplace("Generalization" + std::to_string(i));
}
double endTime2 = clock();//2时间结束
cout << "set2.size = " << set2.size() << " 2 run time is: " << (double)(endTime2 - startTime2) / CLOCKS_PER_SEC << "s" << endl;
cout << endl;
//3.emplace_hint使用提示原位构造元素 返回的是一个迭代器
set<string> set3;
auto set3it = set3.begin();
double startTime3 = clock();//3计算开始
for(int i = 0; i < count; i++)//214748
{
set3.emplace_hint(set3it, "Generalization" + std::to_string(i));
}
double endTime3 = clock();//3时间结束
cout << "set3.size = " << set3.size() << " 3 run time is: " << (double)(endTime3 - startTime3) / CLOCKS_PER_SEC << "s" << endl;
cout << endl;
set<string>::iterator iter1 = set3.emplace_hint(set3it, "scott");
cout << "iter1======" << iter1->data() << endl;
//4. key_comp 返回用于比较键的函数 默认是less,即小于返回true,否则返回false
std::set<int> myset;
int highest;
std::set<int>::key_compare mycomp = myset.key_comp();
for (int i=0; i<=5; i++) myset.insert(i);
std::cout << "myset contains:";
highest = *myset.rbegin();
cout << "highest ==== " << highest << endl;
std::set<int>::iterator it=myset.begin();
do {
std::cout << ' ' << *it;
} while ( mycomp(*(++it), highest) );
std::cout << '\n';
std::set<int> set4;
set4.emplace(1);
set4.emplace(3);
set4.emplace(5);
set4.emplace(7);
std::set<int>::key_compare funCompare = set4.key_comp();//返回一个比较键的函数
bool b1 = funCompare(3, 5);
bool b2 = funCompare(5, 3);
std::cout << "b1 = " << b1 << " b2 = " << b2 << std::endl;
//5. value_comp返回用于在value_type类型的对象中比较键的函数。
//在set容器中Key和值是一样的,所以key_comp和value_comp是一样的效果
std::set<int> myset2;
std::set<int>::value_compare mycomp2 = myset.value_comp();
for (int i=0; i<=5; i++) myset2.insert(i);
std::cout << "myset contains:";
int highest2 = *myset2.rbegin();
cout << "highest2 ==== " << highest2 << endl;
std::set<int>::iterator it2 = myset2.begin();
do {
std::cout << ' ' << *it2;
} while ( mycomp2(*(++it2), highest2) );
std::cout << '\n';
std::set<int> set5;
set5.emplace(12);
set5.emplace(8);
set5.emplace(54);
set5.emplace(6);
int lastValue = *set5.rbegin();//最后一个元素
std::set<int>::iterator firstIt = set5.begin();//第一个元素迭代器
bool b3 = set5.value_comp()(*firstIt, lastValue);
++firstIt;
bool b4 = set5.value_comp()(*firstIt, lastValue);
std::cout << "b3 = " << b3 << " b4 = " << b4 << std::endl;
}
int main()
{
insertOperator();
cout << "Hello, world!" << endl;
return 0;
}
运行结果:
参考: