C ++:如何存储一组有序的元组?

时间:2011-01-11 10:09:56

标签: c++ stl vector

使用GCC 4.x,g ++和STL。应该使用哪个内部结构来保存这样的数组:( (1,4), (2,8), (3,7) )?它应该有静态元素编号以保持原始(添加)顺序。

变体:

  • 设置<图(INT,INT)GT;
  • 阵列<映射>
  • array {array [2],array [2]}

这可以用更好看的方式完成吗?

3 个答案:

答案 0 :(得分:5)

如果它已经排序,则vector<pair<int, int> >更有意义,因为它将允许您保留插入顺序(无论如何将按顺序排序!)。问题是你是否要对插入进行排序?

答案 1 :(得分:4)

std::set持有std :: pair是首先想到的

然而,这可能不符合此要求:

  

它应该有静态元素编号   保留原始(添加)订单。

答案 2 :(得分:2)

这完全取决于您的插入/提取用例。在任何情况下,您都应该使用std::pairboost::tuple作为元素类型,因为它们已经实现了您想要的字典顺序。

关于容器和插入/拔出:你能没有随机访问吗?您是否需要访问所有元素(使用std::set)或仅访问顶部(使用std::priority_queuestd::vector)?如果您需要随机访问,请使用裸std::vector:您是否插入了单个元素?那么它取决于你如何提取:所有元素,一旦你完成插入后?完成后只需使用push_backstd::sort即可。或者你提取了很多?然后使用std::vector::insertstd::lower_bound保持数组排序。