代码之家  ›  专栏  ›  技术社区  ›  Hassan Jalil

std::pair vs Array

  •  7
  • Hassan Jalil  · 技术社区  · 11 年前

    我正在创建一个带有关键字和值的Map。这些值必须有两个单独的条目。 现在我想到的前两个选项是
    要么一起去

    Map< int,array[2] > 
    

    Map < int,pair < float,float > >  
    

    在内存和执行时间方面,这两者中哪一个更好。我个人认为数组会更好,因为我们不需要执行任何搜索功能。我只是计划使用下标访问位置并更改它们。

    2 回复  |  直到 11 年前
        1
  •  6
  •   rubenvb    11 年前

    你有三个选择,正确的选择取决于这两个 int 代表

    1. using mymap = std::map<int, std::array<float, 2>>;
    2. using mymap = std::map<int, std::pair<float, float>>;
    3. 使用此构造的可读代码的首选选项:

      struct somethingmeaningful { float meaningful1; float meaningful2; };
      using mymeaningfulmap = std::map<int, somethingmeaninful>;
      

    注意最后一个是如何神奇地变得有意义的 ;-) .

    另外,请注意我完全忽略了你关于哪个更快的问题。原因是 没关系 .可读代码 有意义的名字 从长远来看,总是表现得更好!

        2
  •  6
  •   dirkster    11 年前

    为了避免显而易见的问题,第一个例子应该是

    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;
    

    那么数组可能会有更多的开销,因为它提供了其他功能,比如迭代器等,而您不会使用这些功能。最好的方法是做一些实验。我发现保持我的实现开放以交换容器等也有助于保持代码干净和模块化。