Has*_*lil 3 c++ arrays std-pair
我正在创建一个带有键和值的Map.值必须有两个单独的条目.现在我想到的前两个选项
要么就是去
Map< int,array[2] >
Run Code Online (Sandbox Code Playgroud)
要么
Map < int,pair < float,float > >
Run Code Online (Sandbox Code Playgroud)
在内存和执行时间方面,这两者中哪一个更好.我个人认为数组会更好,因为我们不需要执行任何搜索功能.我只是计划使用下标访问该位置并更改它们.
你有三个选择,正确的选择取决于两个int代表什么.
using mymap = std::map<int, std::array<float, 2>>;using mymap = std::map<int, std::pair<float, float>>;使用此构造的可读代码的首选选项:
struct somethingmeaningful { float meaningful1; float meaningful2; };
using mymeaningfulmap = std::map<int, somethingmeaninful>;
Run Code Online (Sandbox Code Playgroud)注意最后一个神奇地变得有意义;-).
另外,请注意我是如何完全忽视你的问题,哪个更快.这样做的原因是无关紧要.从长远来看,具有有意义名称的可读代码总是更具性能!
为了弄清楚这一点,第一个例子可能应该是
std::map<int, std::array<float, 2> >
Run Code Online (Sandbox Code Playgroud)
但不太清楚你的意思
[...]计划使用下标访问该位置[...]
请注意,对于一对,你会做类似的事情
std::pair<float, float> a;
a.first = 1.0;
Run Code Online (Sandbox Code Playgroud)
而对于数组,语法看起来像这样
std::array<float, 2> a;
a[0] = 1.0;
Run Code Online (Sandbox Code Playgroud)
那么数组可能会有更多的开销,因为它提供了您不会使用的其他功能,例如迭代器等。最好的方法总是做一些实验。我发现保持我的实现对交换容器等的开放也有助于我保持代码的干净和模块化。