翻转 std::pair 的顺序
Flip order of std::pair
如何翻转 std::pair
的顺序?
是否有内置命令或我需要创建一对新命令。
目前我正在通过创建一对来做到这一点。
std::pair el_ids(0,1);
el_ids = std::make_pair(el_ids.second, el_ids.first);
也可以直接交换内容
std::pair el_ids(0,1);
std::swap(el_ids.first,el_ids.second);
你也可以使用统一初始化:
int main() {
std::pair el_ids(0,1);
el_ids = {el_ids.second, el_ids.first};
}
只要这对的两种类型相同,您就可以交换它们(就像@273k 在评论中指出的那样),例如:
std::pair p = {1, 2};
std::swap(p.first, p.second);
如果类型不同,您必须为其编写一个小的实用函数,因为没有 built-in 方法可以做到这一点,例如:
template<class T>
constexpr auto pair_swap(T&& pair) {
return std::make_pair(
std::forward<T>(pair).second,
std::forward<T>(pair).first
);
}
// Usage Example:
std::pair p = {std::string{"A"}, 12};
auto p2 = pair_swap(std::move(p));
如何翻转 std::pair
的顺序?
是否有内置命令或我需要创建一对新命令。
目前我正在通过创建一对来做到这一点。
std::pair el_ids(0,1);
el_ids = std::make_pair(el_ids.second, el_ids.first);
也可以直接交换内容
std::pair el_ids(0,1);
std::swap(el_ids.first,el_ids.second);
你也可以使用统一初始化:
int main() {
std::pair el_ids(0,1);
el_ids = {el_ids.second, el_ids.first};
}
只要这对的两种类型相同,您就可以交换它们(就像@273k 在评论中指出的那样),例如:
std::pair p = {1, 2};
std::swap(p.first, p.second);
如果类型不同,您必须为其编写一个小的实用函数,因为没有 built-in 方法可以做到这一点,例如:
template<class T>
constexpr auto pair_swap(T&& pair) {
return std::make_pair(
std::forward<T>(pair).second,
std::forward<T>(pair).first
);
}
// Usage Example:
std::pair p = {std::string{"A"}, 12};
auto p2 = pair_swap(std::move(p));