我正在测试将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循环中,键是相同的,所以我的地图只有一个元素。代码有什么问题?请帮助我,你有不同的方法来创建随机元素的地图。
答案 0 :(得分:1)
每次拨打srand
时都会致电randomString
,因为time
功能返回的时间只有第二个分辨率,如果您在randomString
内多次呼叫srand
同样的,所有这些调用将设置相同的种子,导致您具有相同的“随机”序列。
在程序开头只调用一次 {/ p>。