如何最好地访问std :: pair的元素?

时间:2018-02-23 10:01:05

标签: c++ std-pair

在使用std :: pair时,我遇到了两种不同的方法来访问它的元素。因为它们似乎都有效且有效,我想知道它们之间有什么区别,哪种方法是首选方法?

std::pair<int, int> p(1,1); // can be of any type.
int i1 = p.first;        // first approach
int i2 = std::get<0>(p); // second approach

1 个答案:

答案 0 :(得分:1)

如果在给定的应用中pair0中的任何一个不是文字而是参数,请使用get

template<class... T> auto sum0(const T&... t) {
  return (std::get<0>(t)+...);
}

template<int i> auto sqrAt(const std::pair<int,double> &p) {
  const auto v=std::get<i>(p);
  return v*v;
}

如果pair0字面上都存在,出于可读性原因(包括它表明有意使用.first),使用std::pair显然更为可取:

template<class M>
void addKeys(M &m) {
  for(auto &kv : m) kv.second+=kv.first;
}

关于此功能的所有内容都表明了与std::mapstd::unordered_map的预期用途,尽管唯一的类型是void,但它仍然具有可读性。

相关问题