如何对向量<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
.
是否可以使用 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
.