衔接上章https://blog.csdn.net/qq_42138448/article/details/124259469,本章主要内容还是讲解容器。关联容器主要优势是查找,但我们安插的时候,是按照顺序来安插,因此会稍微慢一点。
multiset测试代码:#include
#include
#include
#include
namespace stl03
{
void test_multiset()
{
srand(time(NULL));
cout << "输入数据数量\n";
int value;
cin >> value;
// set
multiset c;
char buf[10];
clock_t timeStart = clock();
for (int i = 0;i < value;i++)
{
try
{
snprintf(buf, 10, "%d", rand());
c.insert(buf);
}
catch (const std::exception& p)
{
abort();
}
}
cout << "milli-seconds:" << clock() - timeStart << endl;
cout << "multiset.size():" << c.size() << endl;
cout << "multiset.max_size():" << c.max_size() << endl;
cout << "输入你需要查找的数字:\n";
string target;
cin >> target;
timeStart = clock();
{
// 全局查找法
auto it = ::find(c.begin(), c.end(), target);
cout << "全局find花费的时间:" << clock() - timeStart << endl;
if (it != c.end())
cout << "找到了!" << *it << endl;
else
cout << "没有找到。\n";
}
timeStart = clock();
{
auto it = c.find(target);
cout << "成员find花费的时间:" << clock() - timeStart << endl;
if (it != c.end())
cout << "找到了!" << *it << endl;
else
cout << "没有找到。\n";
}
}
};
int main()
{
stl03::test_multiset();
}
运行结果:
由结果可知,全局的find查找速度远不如成员find,同时验证了关联容器适合查找的说法。
multimap测试代码:map和set不同点在于,Set容器value=key而map缺需要指定key,个人觉得map并不好用,因为map的查找成员函数是指定key进行查找的,所得到的值是key下对应的value。而并不是你想找的那个值。
#include
运行结果:
unordered_multiset测试:unordered其实就是哈希表,之前所涉及到的set和map都是通过红黑树的方式来进行数据存储。
#include
#include
#include
#include
namespace stl05
{
void test_unordered_multiset()
{
srand(time(NULL));
cout << "输入数据数量\n";
int value;
cin >> value;
// 设置map,map第一
unordered_multiset c;
char buf[10];
clock_t timeStart = clock();
for (int i = 0; i < value; i++)
{
// try_catch捕捉错误
try
{
snprintf(buf, 10, "%d", rand());
c.insert(buf);
}
catch (const std::exception& p)
{
// 输出错误信息
cout << "i = " << i << p.what() << endl;
abort(); // 退出程序
}
}
cout << "milli-seconds:" << clock() - timeStart << endl;
cout << "unordered_multiset.size():" << c.size() << endl;
cout << "unordered_multiset.max_size():" << c.max_size() << endl;
cout << "unordered_multiset.bucket_count():" << c.bucket_count() << endl;
cout << "unordered_multiset.load_factory():" << c.load_factor() << endl;
cout << "unordered_multiset.max_bucket_count():" << c.max_bucket_count() << endl;
for (int i = 0;i < 20;i++)
{
cout << "bucket #" << i << " has " << c.bucket_size(i) << endl;
}
cout << "输入你要查找的目标\n";
string target;
cin >> target;
timeStart = clock();
{
auto it = c.find(target);
cout << "成员find花费的时间:" << clock() - timeStart << endl;
if (it != c.end())
cout << "找到了!" << *it << endl;
else
cout << "没有找到。\n";
}
}
};
int main()
{
stl05::test_unordered_multiset();
}
map和set测试代码:
#include
运行结果:
map:
set:
从运行结果来看,若Set和Map前面不加multi,就说明key是不能重复的,而在map的设置里面,key和value是分开取的,因此它的总数仍然是一百万,但在set中key和value是相等的,因此set的总数远小于一百万。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)