在使用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
答案 0 :(得分:1)
如果在给定的应用中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
,但它仍然具有可读性。