c++ - 当两个 std::map 对象相同时
问题描述
我有两个std::map
使用相同数据填充的对象,但顺序不同:
using TMap = std::map<int, std::wstring>;
using TSourceData = std::vector< std::pair<int, std::wstring> >;
TSourceData gen_source_data(int size)
{
TSourceData result;
result.reserve(size);
for(int i = 0; i < size; ++i)
{
result.push_back( std::make_pair(i, std::to_wstring(i)) );
}
return result;
}
TMap fill_map(const TSourceData& source)
{
TMap result;
auto randomized = source;
std::random_shuffle(randomized.begin(), randomized.end());
for(const auto &e : randomized)
{
result[e.first] = e.second;
}
return result;
}
int main()
{
auto source = gen_source_data(1000);
auto m1 = fill_map(source);
auto m2 = fill_map(source);
std::wcout << (m1 == m2) << std::endl;
}
在 VS2017 中,它似乎总是打印1
,所以无论它们以什么顺序填充,两张地图都是相等的。但能保证如此吗?如果是这样,你能解释一下为什么吗?
解决方案
推荐阅读
- c# - IIS 请求计数限制与 IIS Express - Web API 核心
- python - 了解 scipy.integrate.odeint 中的时间步长
- javascript - 如何在 React 中禁用挂载时的初始悬停过渡?
- node.js - 如何将 Angular Universal 应用程序部署到 Node.js 生产服务器?
- java - Heroku 容器:释放抛出 UnhandledPromiseRejectionWarning:
- c - 为什么代码不是递归出来的?
- google-oauth - 与 Google 登录关联的帐户:有没有办法知道用户何时通过其 Google 帐户设置撤销/删除了访问权限?
- amazon-web-services - 如何在 AWS Lambda 中获取 Cognito 用户的身份 ID
- c - C缓冲区溢出得到分段错误
- c# - DefaultValue = new DefaultColumnValue { Value = "Some text"} 不起作用