c++ - 我可以使用 std::less 来比较两个 char 数组吗?
问题描述
我有这个函数compare
,它是一个实例化的函数模板,用于比较两个不同大小的字符数组:
template <unsigned N, typename M>
bool compare(char const (&a)[N], char const (&b)[M]){
// return strcmp(a, b); // Ok
return std::less<char const(&)[N]>(a, b); // error here.
}
strcmp
它在内部调用很好,compare
但我如何使用std::less
它们来比较它们?如何实例化and
std::less<?>
的类型?a
b
解决方案
从根本上说,您试图将两个值与两种不同类型进行比较:char const (&a)[N]
vs char const (&a)[M]
。但是 std::less 只能比较具有相同类型的两个值。所以要让它工作:
#include <iostream>
template <unsigned N>
bool compare(char const (&a)[N], char const (&b)[N]){
return std::less<char const[N]>()(a, b);
}
int main() {
char const a[2] = {'a', 'a'};
char const b[2] = {'a', 'a'};
compare<2>(a, b);
}
另外,您必须解决一个小问题:您需要使用
std::less<char const[N]>()(a, b)
代替
std::less<char const[N]>(a, b)
std::less<char const[N]>()
用于创建 std::less 实例,然后operator()
在该实例上调用。
推荐阅读
- arrays - 为什么 scipy.sparse.linalg.LinearOperator 与 @、np.dot 和 np.matmul 有不同的行为
- c# - 在不同的类上反序列化 json
- javascript - 如何在角度 p-treetable 中使用“loadingBody/loadingbody”模板?
- r - 如何从 R 的小标题中找到包含“你”和“我”这两个词的歌曲的唯一名称?
- java - 在 xml 字符串中解组内部 CDATA
- sql - 在 SQL Server Management Studio 中启用文件组
- python - 熊猫'read_json'没有按预期工作
- c# - 使位图适合图片框的大小 - Winform C#
- python - 从多个 csv 文件中删除重复项并保存在另一个目录中
- arrays - 将 mongodb 数组映射到对象