翻转 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};
}

运行 示例:https://godbolt.org/z/6vjf58co8

只要这对的两种类型相同,您就可以交换它们(就像@273k 在评论中指出的那样),例如:

godbolt example

std::pair p = {1, 2};
std::swap(p.first, p.second);

如果类型不同,您必须为其编写一个小的实用函数,因为没有 built-in 方法可以做到这一点,例如:

godbolt example

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));