c++ - 如何创建具有随机键值的 std::map

原文 标签 c++ dictionary random

我正在测试将 std::map(std::string, std::string) 写入硬盘文件的速度(使用 Boost 的序列化)。所以我需要在 map 中创建一个包含很多元素的 map 。为 map 创建随机键时出现问题。这是我生成 map 的代码:

#include <iostream>
#include <fstream>
#include <map>
#include <string>
#include <sstream>
#include <chrono>

using namespace std;

string randomString(int len) {
    srand(time(0));
    string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    int pos;
    while (str.size() != len) {
        pos = ((rand() % (str.size() - 1)));
        str.erase(pos, 1);
    }
    return str;
}

void save() {
    std::map<std::string, std::string> myMap;
    string key;
    string value;
    for (int i = 0; i < 50; i++) {
        myMap[randomString(20)] = randomString(20);
    }

    cout << "Map size: " << myMap.size() << endl;

    for (map<string, string>::iterator ii = myMap.begin(); ii != myMap.end(); ++ii) {
        cout << (*ii).first << ": " << (*ii).second << endl;
    }
}

int main() {
    save();
    return 0;
}

在 for 循环中,键是相同的,所以我的 map 只有一个元素。代码有什么问题?请帮助我,您是否有不同的方法来创建带有随机元素的 map 。

最佳答案

您调用srand每次调用randomString ,并且由于 time 返回的时间如果调用 randomString,函数只有第二个分辨率在同一秒内多次,所有这些调用将设置相同的种子,导致您拥有相同的“随机”序列。

调用 srand只有一次,在程序开始时。

关于c++ - 如何创建具有随机键值的 std::map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31243713/

相关文章:

c# - 如何在 WinForms 中将字典绑定(bind)到列表框

python - 如何在python中处理字典的多个键?

python - 子数据帧的子数据帧

c - 从/dev/urandom移植到非Unix平台

javascript - 每5秒加载一次随机CSS,而无需刷新页面

iphone - Objective-C 的内置 rand() 函数的确切算法是什么?

c++ - AND OR 运算符

c++ - 通过 RS232 串行端口从条码扫描器读取异步数据

c++ - std::move和unique_ptr::reset之间有什么区别?

c++ - 在C++中,如何从B类访问Class中的多维数组?