我正在创建一个包含键和值的Map。值必须有两个单独的条目。 现在我想到的前两个选项是 或者选择
Map< int,array[2] >
或
Map < int,pair < float,float > >
在内存和执行时间方面,这两者中哪一个更好。我个人认为数组会更好,因为我们不需要执行任何搜索功能。我只是计划使用下标访问该位置并更改它们。
答案 0 :(得分:6)
您有三个选择,正确的选择取决于两个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>;
请注意最后一个神奇地变得有意义;-)
。
另外,请注意我完全无视你的问题,哪个更快。这样做的原因是它并不重要。从长远来看,具有有意义名称的可读代码总是更具性能!
答案 1 :(得分:3)
为了明白这一点,第一个例子应该是
std::map<int, std::array<float, 2> >
但是,你的意思并不十分清楚
[...]计划使用下标[...]
访问该位置
请注意,对于一对,您可以执行类似
的操作std::pair<float, float> a;
a.first = 1.0;
而对于数组,语法看起来就像那样
std::array<float, 2> a;
a[0] = 1.0;
然后一个数组可能有更多的开销,因为它提供了其他功能,如迭代器等,你不会使用它们。最好的方法是总是做一些实验。我发现保持我的实现打开以交换容器等等也有助于我保持代码清洁和模块化。