IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 3、关联容器测试(multisetmultimapsetmapunordered_multiset.......) -> 正文阅读

[游戏开发]3、关联容器测试(multisetmultimapsetmapunordered_multiset.......)

衔接上章https://blog.csdn.net/qq_42138448/article/details/124259469,本章主要内容还是讲解容器。关联容器主要优势是查找,但我们安插的时候,是按照顺序来安插,因此会稍微慢一点。

multiset测试代码:

#include <set>
#include <iostream>
#include <cstdlib>
#include <ctime>
namespace stl03
{
    void test_multiset()
    {

        srand(time(NULL));
        cout << "输入数据数量\n";
        int value;
        cin >> value;
        // set
        multiset<string> 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 <map>
namespace stl04
{
    void test_multimap()
    {
		srand(time(NULL));
		cout << "输入数据数量\n";
		int value;
		cin >> value;
		// 设置map,map第一
        multimap<int, string> 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(pair<int, string>(i, buf));
            }
            catch (const std::exception& p)
            {
                // 输出错误信息
                cout << "i = " << i << p.what() << endl;
                abort(); // 退出程序
            }
        }
        cout << "milli-seconds:" << (clock() - timeStart) << endl;
        cout << "multimap.size:" << c.size() << endl;
        cout << "mutlmap.max_size" << c.max_size() << endl;
		cout << "输入你需要查找的数字:\n";
		int target;
		cin >> target;
		timeStart = clock();
		{
			auto it = c.find(target);
			cout << "成员find花费的时间:" << clock() - timeStart << endl;
			if (it != c.end())
				cout << "找到了!" << (*it).second << endl;
			else
				cout << "没有找到。\n";
		}
    }
};

运行结果:

unordered_multiset测试:

unordered其实就是哈希表,之前所涉及到的set和map都是通过红黑树的方式来进行数据存储。

#include <unordered_set>
#include <iostream>
#include <cstdlib>
#include <ctime>
namespace stl05
{
    void test_unordered_multiset()
    {
		srand(time(NULL));
		cout << "输入数据数量\n";
		int value;
		cin >> value;
		// 设置map,map第一
        unordered_multiset<string> 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>
namespace stl06
{
    void test_map()
    {
        srand(time(NULL));
        cout << "测试map容器。\n";
        map<int, string> c;
        char buf[10];
        clock_t timeStart = clock();
        cout << "输入数量:\n";
        int value;
        cin >> value;
		for (int i = 0; i < value; i++)
		{
			// try_catch捕捉错误
			try
			{
				snprintf(buf, 10, "%d", rand());
				c.insert(pair<int,string>(i, buf));
			}
			catch (const std::exception& p)
			{
				// 输出错误信息
				cout << "i = " << i << p.what() << endl;
				abort(); // 退出程序
			}
		}
		cout << "milli-seconds:" << clock() - timeStart << endl;
		cout << "map.size():" << c.size() << endl;
		cout << "map.max_size():" << c.max_size() << endl;
		cout << "输入你要查找的目标\n";
		int target;
		cin >> target;
		timeStart = clock();
		{
			auto it = c.find(target);
			cout << "成员find花费的时间:" << clock() - timeStart << endl;
			if (it != c.end())
				cout << "找到了!" << (*it).second << endl;
			else
				cout << "没有找到。\n";
		}
    }
}
#include <set>
namespace stl07
{
	void test_set()
	{
        srand(time(NULL));
		cout << "测试set容器。\n";
		set<string> c;
		char buf[10];
		clock_t timeStart = clock();
		cout << "输入数量:\n";
		int value;
		cin >> value;
		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 << "set.size():" << c.size() << endl;
		cout << "set.max_size():" << c.max_size() << 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()
{
    stl06::test_map();
    stl07::test_set();
}

运行结果:

map:

?set:

从运行结果来看,若Set和Map前面不加multi,就说明key是不能重复的,而在map的设置里面,key和value是分开取的,因此它的总数仍然是一百万,但在set中key和value是相等的,因此set的总数远小于一百万。?

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:46:08  更:2022-04-24 09:46:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 21:35:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码