前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c++关于multiset的头文件包含问题

c++关于multiset的头文件包含问题

作者头像
ccf19881030
发布2019-12-10 17:48:24
1.4K0
发布2019-12-10 17:48:24
举报
文章被收录于专栏:ccf19881030的博客ccf19881030的博客

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://cloud.tencent.com/developer/article/1551729

最近在Bilibili上看到不少侯捷老师C++的视频教程,侯捷老师翻译了很多C++的经典书籍,比如《Essential C++中文版》、《STL源码剖析》,也写了《深入浅出MFC 第二版》。

C++ STL与泛型编程高级-侯捷

使用到multiset这个关联容器时,本来以为Visual Studio2017中会提供#include 这个头文件,没想到加入到显示错误,后来查了下资料,说是multiset只是set的一个特例而已,只需要包含set的头文件即可,使用#include即可。

测试代码如下:

// test_multiset.hpp

代码语言:javascript
复制
#ifndef _TEST_MULTISET_H
#define _TEST_MULTISET_H

#include <set>			// 注意:此处不能使用#include <multiset>
#include <stdexcept>
#include <string>
#include <iostream>
#include <ctime>
#include <cstdio>   // snprintf()
#include <cstdlib>  // abort()
#include <algorithm>

#include "pub.h"

using std::multiset;
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::exception;
using std::find;
using std::sort;

namespace jj06
{
	void test_multiset(long& totalCount)
	{
		cout << "\ntest_multiset()......... \n";

	multiset<string> c;
	char buf[10];
	clock_t timeStart = clock();
		for (long i = 0; i < totalCount; ++i)
		{
			try {
				snprintf(buf, 10, "%d", rand() % 65535);
				c.insert(string(buf));
			}
			catch (std::exception& e) {

				cout << "i=" << i << e.what() << endl;
				abort();
			}
		}

		cout << "milli-seconds:" << (clock() - timeStart) << endl;
		cout << "multiset.size()= " << c.size() << endl;
		cout << "multiset.max_size()= " << c.max_size() << endl;

	string target = get_a_target_string();
		{
			timeStart = clock();
			auto pItem = ::find(c.begin(), c.end(), target);	// 比c.find(...)慢很多
			cout << "::find(), mill-seconds: " << (clock() - timeStart) << endl;

			if (pItem != c.end())
				cout << "found, " << *pItem << endl;
			else
				cout << "not found! " << endl;
		}

		{
			timeStart = clock();
			auto pItem = c.find(target);		// 比::find(...)快很多
			cout << "::find(), mill-seconds: " << (clock() - timeStart) << endl;

			if (pItem != c.end())
				cout << "found, " << *pItem << endl;
			else
				cout << "not found! " << endl;
		}
	}
}
#endif

// pub.h

代码语言:javascript
复制
#ifndef _PUB_H_
#define _PUB_H_

#ifdef _MSC_VER
#define snprintf _snprintf  
#endif

#include <string>
#include <cstdio>
#include <iostream>

using std::string;
using std::cin;
using std::cout;

//const long ASIZE = 1000000;
const long ASIZE = 50000;

long get_a_target_long()
{
    long target = 0;
    cout << "target (0~" << RAND_MAX << "): ";
    cin >> target;
	
    return target;
}

string get_a_target_string()
{
    long target = 0;
    char buf[10];

    cout << "target (0~" << RAND_MAX << "): ";
    cin >> target;
    snprintf(buf, 10, "%d", target);
    
    return string(buf);
}
int compareLongs(const void* a, const void* b)
{
    return (*(long*)a - *(long*)b);
}

int compareStrings(const void* a, const void* b)
{
    if (*(string*)a > *(string*)b)
	    return 1;
    else if(*(string*)a < *(string*)b)
	    return -1;
    else
	    return 0;
}
#endif

// main.cpp

代码语言:javascript
复制
#include "test_multiset.hpp"
int main(int argc, char* argv[])
{
long totalCount;
    cout << "how many elements:";
    cin >> totalCount;
    
    srand((unsigned)time(NULL));
	jj06::test_multiset(totalCount);
	
    getchar();

    return 0;
}

运行示例

代码语言:javascript
复制
[root@192 src]# g++ -o test_multiset main.cpp pub.h test_multiset.hpp
[root@192 src]# ./test_multiset 
how many elements:1000000

test_multiset()......... 
milli-seconds:9750000
multiset.size()= 1000000
multiset.max_size()= 461168601842738790
target (0~2147483647): 23456
::find(), mill-seconds: 50000
found, 23456
c.find(), mill-seconds: 0
found, 23456
[root@192 src]# 

完整的代码见本人的Github:stl_container_test

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-12-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 测试代码如下:
  • 运行示例
  • 完整的代码见本人的Github:stl_container_test
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档