【问题标题】:How to best access elements of std::pair?如何最好地访问 std::pair 的元素?
【发布时间】:2018-02-23 10:01:05
【问题描述】:

在使用 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

【问题讨论】:

  • 两者是等价的,没问题。 “更喜欢”哪一个是风格和个人喜好的问题。
  • std::get 适用于其他一些类型,例如 tuple,因此在模板化代码中很有用。没有其他具体优势。
  • 如果我需要在一个项目中使用std::tuplestd::pair,我会从一个项目中去掉std::pair
  • @S.M.祝你好运改变std::map&lt;...&gt;::value_type等。
  • @Caleth std 不是我的项目。

标签: c++ std-pair


【解决方案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 都在字面上存在,出于可读性原因(包括它表示有意识地使用std::pair),使用.first 显然更可取:

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

关于此函数的所有内容都表明与std::mapstd::unordered_map 一起使用,尽管唯一的类型名为void,但它的可读性非常好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2015-03-09
    • 2022-10-24
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多