用于存储相同类型的两个相关值的惯用法

时间:2013-11-26 11:00:37

标签: c++ c++11 std-pair idiomatic stdarray

这将是一个非常简单的问题:在C ++ 03中,我将使用std::pair存储两个相同类型的值。但是,当我希望我的两个值都属于同一类型时,不得不重复两次类型是一种麻烦。现在,使用C ++ 11,我们有std::array。写这篇文章是否更具惯用性:

std::array<int, 2> foo;

......而不是:

std::pair<int, int> foo;

......目的是存储两个相关数据(图片,例如函数求解二次方程的结果)?

6 个答案:

答案 0 :(得分:4)

我认为标准库或Boost中没有适合此类型的数据类型。

pair<T, T> 绝对错误:
如果这些代表多项式的根,那么make_pair(1, 2) == make_pair(2, 1)应该是 true

出于同样的原因,除非您更改比较行为,否则数组/向量也不会起作用。

所以我要说一个bag<T, N>数据类型代表一个固定大小的multiset<T>,有点像array<T, N>表示具有固定大小的vector<T>

由于尺寸很小,你可以通过暴力(比较,平等检查等)来做所有事情。

答案 1 :(得分:1)

我仍然使用pair来表示一个值与另一个值相关。数组并没有向我传达这种意义。

答案 2 :(得分:0)

正是出于惯用原因,我建议使用pair a表示两个值都相关,而array与值列表更相关(以我的拙见)。

例如,在您建议的用法中,两个值之间的关系将是二次函数本身。

答案 3 :(得分:0)

如果你有两个项目之间的关系,并且你想描述这种关系,那么

std::pair是有道理的。

然而,在你的情况下我会使用std::array,因为二次方程的两个解没有任何关系(我可以看到解与方程之间的关系,但不是两个解之间的关系) )。

答案 4 :(得分:0)

取决于更大的背景。

在你提到的例子中我会选择std::array,因为那样你也可以在等式的程度上模拟函数:

template <int N>
std::array<double, N> solveEquation(const Polynomial<N>& poly);

答案 5 :(得分:0)

我会说std::pair<>的相应C ++ 11抽象是std::tuple<>,因为一对只是元组的一个特例。

std::pair<>不一定存在相同类型,BTW。