如何对向量<any>进行排序?

How to sort a vector<any>?

是否可以使用 std::sort 或其他方式对 vector 进行排序?

我正尝试这样做

  vector<any> va{ 55ll, 'a', -1};
   
    sort(va.begin(), va.end(), [](const any& lhs, const any& rhs) { return any_cast<decltype(lhs.type())>(lhs) > any_cast<decltype(lhs.type()>(rhs) });

Is it possible to sort vector by using std::sort or somehow else?

有可能。您可以采用与排序 任何 其他事物相同的方式:通过定义一个函数来比较两个具有严格总顺序的 std::any

any_cast<decltype(lhs.type())>(lhs)

这行不通。 std::any::type returns std::type_info,除非您在 std::any 中存储类型 std::type_info 的对象,否则 std::any_cast 将失败。


有多种方法可以对异构类型的对象进行排序。

一个相对简单的方法是主要按对象的类型排序。这里需要注意的是,类型的顺序不可跨系统移植:

bool
any_less_type(const std::any& l, const std::any& r)
{
    auto& lt = l.type();
    auto& rt = r.type();
    return std::type_index(lt) < std::type_index(rt);
}

然后,可排序的相同类型的对象可能会被进一步排序,但该功能可能必须限制为一小组类型,就像您使用 std::variant.