c++ - 有没有办法在 c++11 中按索引初始化向量?
问题描述
在初始化后,很容易按索引填充向量的元素:
std::vector<int> myVector {0, 0, 0};
int indexOfInterest = 1;
myVector[indexOfInterest] = 999;
// myVector now contains {0, 999, 0}
但是,有没有办法直接用索引初始化向量?indexOfInterest 将来可能会在我的代码中发生变化,我想避免使用
std::vector<int> myVector {0, 999, 0};
有没有类似的语法
int indexOfInterest = 1;
std::vector<int> myVector[3] {indexOfInterest : 999}; // this is made-up syntax!
// desired: myVector contains {0, 999, 0} and is 3 elements large
那可以在C++11中使用来实现这个效果吗?
解决方案
另一种方法是使用std::unordered_map
. 不完全一样,但可以根据您正在做的事情为您工作:
std::unordered_map<int, int> mp{ { indexOfInterest, 999} };
mp[someOtherIndex] = 42;
当您尝试访问它们时,您尚未分配任何内容的所有索引都将具有默认值(在本例中为 0)。
推荐阅读
- flutter - 如何使用密钥从 Firestore 加载数据
- python - 即使我插入正确的值,Python While 也会继续循环
- php - 使用 laravel 向客户发送自定义电子邮件
- sql - 将 JSON 数组与另一个表连接
- javascript - 数据未在带有 ajax 的模式窗口中动态显示
- pandas - 为排名分布绘制 CDF
- asp.net-core - ASP.NET Core 3.1“不支持的处理程序方法返回类型'Microsoft.AspNetCore.Mvc.Rendering.SelectList'”
- jenkins - Jenkins 管道中的 Jenkins 用户接受代码问题。如何在单个管道中实现多个验收代码
- google-analytics - 谷歌分析中的移动应用属性与网络应用相匹配
- flutter - 如果小时小于10,颤振如何在一个小时后面添加一个0?