c++ - 如何比较不同长度的元组?

标签 c++ c++11 tuples stdtuple

我想写一个比较器来比较不同长度但具有相同“前缀”的元组。考虑以下情况,我有两个元组。

auto t1 = std::make_tuple(10, "Test1");
auto t2 = std::make_tuple(10, "Test", 3.14);


我想对 t1 < t2 应用“less”,其中仅比较元组的两个第一个成员(相同类型?),而第三个被省略。可能吗?

最佳答案

好吧,既然没有人插话,那就是解决方案。它使用 C++14 std::index_sequence,因此递归隐藏在其中。

#include <tuple>
#include <utility>

template<class... ARGS1, class... ARGS2, std::size_t... Is>
bool tuple_compare_helper(const std::tuple<ARGS1...>& lhs, const std::tuple<ARGS2...>& rhs, std::index_sequence<Is...> ) {
  return std::tie(std::get<Is>(lhs)...) < std::tie(std::get<Is>(rhs)...);

}

template<class... ARGS1, class... ARGS2> 
bool tuple_compare(const std::tuple<ARGS1...>& lhs, const std::tuple<ARGS2...>& rhs) {
  const auto min_size = std::min(sizeof...(ARGS1), sizeof...(ARGS2));

  return tuple_compare_helper(lhs, rhs, std::make_index_sequence<min_size>());
}

// test driver
#include <iostream>
int main() {
  auto t1 = std::make_tuple(1, std::string("One"), 2.0);
  auto t2 = std::make_tuple(3, std::string("Two"));


  std::cout << tuple_compare(t2, t1) << "\n";
}

关于c++ - 如何比较不同长度的元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35563209/

相关文章:

c++ -/usr/bin/ld : cannot find -lGL

C++ 从类内部调用类方法

c++ - 为 4 种类型选择 2 个模板函数之一

c++ - 为什么对 std::tuple 的 std::vector 进行排序比对 std::arrays 的 vector 排序更快?

python - 对元组中的元素进行排序(获得最高)

c++ - 在 rosmake (CMakeLists.txt) 中为库指定自定义包含目录

c++ - 除了与旧标准代码一起使用外,Boost 库在包含在 C++ 中后会发生什么变化?

c++ - 使用 std::function 对象将自定义删除器传递给 std::unique_ptr

c++ - 如何使用引用发送 ZMQ 消息?

scala - 在 Scala 元组上使用函数组合器?