rand与多映射中的字符串向量



我有一个字符串向量,它有三种颜色。我的输出只给我一个第一个颜色"红色",我希望它是随机的。vector<string> colors = {"red", "green", "yellow"};此代码有问题Variety x= static_cast<Variety>(rand()%3);fruit.insert(make_pair(x,colors[rand()%3]));我试着做+1,但那只是变绿了。

enum class Variety {
orange,
pear,
apple
};
vector<string> colors = {"red", "green", "yellow"};
struct Fruit {
Variety v; string color; // red, green or orange
};
int main() {
multimap<Variety,string> fruit;
bool foundOrange;
for (auto j = 0; j < (rand() % 100 + 1); ++j) {
Variety x = static_cast<Variety>(rand() % 3);
fruit.insert(make_pair(x, colors[rand() % 3]));
}
return EXIT_SUCCESS;
}

使用rand()的正确方法是首先调用srand()srand()将生成一系列随机数,而rand()将简单地对它们进行迭代。如果你不打srand(),每次使用"rand(("都会得到相同的号码。

srand示例:

int main() {
// Call this function once to generate the random numbers using the seed `time(NULL)`
srand(time(NULL));
for (size_t i = 0; i < 10; i++) {
std::cout << rand() % 5 << std::endl; // Go through the random numbers series
}
return EXIT_SUCCESS;
}

然而,在C++中有<random>库,它将使您在生成随机数的任务中的生活更加轻松(并且将比使用srand&rand更好地工作(。

// Function to generate random numbers between `min` and `max` params
size_t get_random(size_t min, size_t max) {
// the generator will only be seeded once since it's static (Equivalent to calling `srand` once)
static std::mt19937 gen(std::random_device{}());
std::uniform_int_distribution<size_t> dist(min, max);
return dist(gen); // generate random number
}

功能创意来源:@TedLingmo
查看更多细节:通过构造函数生成的所有对象都具有相同的向量

最新更新