啦啦啦大马西亚 2021-03-21 14:56 采纳率: 0%
浏览 37

有关std::unordered_set的构造函数的奇怪问题

测试环境:Qt creator, MinGW 32bit Release

想要测试定义一个std::unordered_set需要花费多少时间,于是有如下代码

#include <iostream>
#include <unordered_set>
#include <time.h>

using namespace std;

int main()
{
    const int N = 10000000;
    int num = N;
    clock_t start, finish;
    start = clock();
    while(num-- > 0){
        std::unordered_set<int> set_;
    }
    finish = clock();
    cout << "create " << N <<" std::unordered_set<int> : " << (double)(finish - start) << " ms\n";
    

    return 0;
}

结果发现无论N的值设为多大,都只花费0ms,好像set的构造函数并没有被执行。

 

另外,当我执行两遍while循环进行测试,代码如下

#include <iostream>
#include <unordered_set>
#include <time.h>

using namespace std;

int main()
{
    const int N = 10000000;
    int num = N;
    clock_t start, finish;
    start = clock();
    while(num-- > 0){
        std::unordered_set<int> set_;
    }
    finish = clock();
    cout << "create " << N <<" std::unordered_set<int> : " << (double)(finish - start) << " ms\n";

    start = clock();
    num = N;
    while(num-- > 0){
        std::unordered_set<int> set_;
    }
    finish = clock();
    cout << "create " << N <<" std::unordered_set<int> : " << (double)(finish - start) << " ms\n";
    

    return 0;
}

就出现了奇怪的结果,两次while都花费了100多ms,明明之前测试时无论N值设为多少,第一个while循环只花费0ms。

且花费的时间会随着N增大而变长

现在如果我将某一个while内的set注释掉,则时间又会变成0ms

#include <iostream>
#include <unordered_set>
#include <time.h>

using namespace std;

int main()
{
    const int N = 10000000;
    int num = N;
    clock_t start, finish;
    start = clock();
    while(num-- > 0){
        std::unordered_set<int> set_;
    }
    finish = clock();
    cout << "create " << N <<" std::unordered_set<int> : " << (double)(finish - start) << " ms\n";

    start = clock();
    num = N;
    while(num-- > 0){
        //std::unordered_set<int> set_;
    }
    finish = clock();
    cout << "create " << N <<" std::unordered_set<int> : " << (double)(finish - start) << " ms\n";
    

    return 0;
}

 

这不是很奇怪嘛,unordered_set的定义所花费的时间与外部循环次数没有关系,而是与在同一代码段有没有再次定义有关,而且只有unordered_set才会有这个现象list vector set都没有这种情况,请问这是为什么??

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-07 17:42
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题