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

How to best access elements of 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

如果在给定的应用程序中,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.

,但它非常易读