如何最好地访问 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
如果在给定的应用程序中,pair
或 0
不是文字而是参数,请使用 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;
}
如果 pair
和 0
都按字面意思出现,出于可读性原因,使用 .first
显然更可取(包括它表明有意识地使用 std::pair
):
template<class M>
void addKeys(M &m) {
for(auto &kv : m) kv.second+=kv.first;
}
关于这个函数的一切都表明了与 std::map
或 std::unordered_map
的预期用途,尽管唯一的类型命名为 void
.
,但它非常易读
在使用 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
如果在给定的应用程序中,pair
或 0
不是文字而是参数,请使用 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;
}
如果 pair
和 0
都按字面意思出现,出于可读性原因,使用 .first
显然更可取(包括它表明有意识地使用 std::pair
):
template<class M>
void addKeys(M &m) {
for(auto &kv : m) kv.second+=kv.first;
}
关于这个函数的一切都表明了与 std::map
或 std::unordered_map
的预期用途,尽管唯一的类型命名为 void
.