如何使用键值随机创建std :: map

时间:2015-07-06 10:39:05

标签: c++ dictionary random

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

#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循环中,键是相同的,所以我的地图只有一个元素。代码有什么问题?请帮助我,你有不同的方法来创建随机元素的地图。

1 个答案:

答案 0 :(得分:1)

每次拨打srand时都会致电randomString,因为time功能返回的时间只有第二个分辨率,如果您在randomString内多次呼叫srand同样的,所有这些调用将设置相同的种子,导致您具有相同的“随机”序列。

在程序开头只调用一次 {/ p>。