c++ - 在 C++ 中随机化 map

标签 c++

我正在寻找一种随机化 std::map<unsigned int,double> 的方法以一种将键和值保持在一起但混合元素的方式。你有什么好的建议吗?我发现 std::random_shuffle不适用于 map 。以 vector 格式混洗值对我的情况没有帮助。提前感谢您的任何建议!

最佳答案

std::map is a sorted associative container ,因此它不支持键值对的任意重新排列。

假设您需要映射来关联键和值,您可以使用指向映射元素的辅助 std::vector 指针来定义不同的迭代序列:

using pair_type = std::pair<unsigned int, double>;
std::vector<const pair_type*> pair_ptrs;

for(const auto& p : your_map) 
{
    pair_ptrs.emplace_back(&p);
}

std::shuffle(std::begin(pair_ptrs), std::end(pair_ptrs), /* ... */);

(请注意 std::random_shuffle is deprecated。您应该改用 std::shuffle。)

关于c++ - 在 C++ 中随机化 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41551874/

相关文章:

c++ - 共享库g++错误段错误

c++ - 与 g_signal_handlers_block_by_func() 等价的 gtkmm 是什么?

c++ - 传递从 std::string 转换为 wstring 的路径时,CreateProcess 失败

C++ 多态错误

c++ - g++ "undefined reference"错误

c++ - 初始化一对具有一定长度和相同数字的 vector

c++ - 我们可以在 C++ 中创建可变长度数组吗?

c++ - 将 bool 值更改为 0 或 1 以外的值?

c++ - RAII类设计

c++ - 关于 C++ 中的头文件创建错误