我需要从给定的字符串中提取特定大小的所有子字符串,然后在std::unordered_map<string, int*>
中查找每个子字符串。我尝试使用this answer的建议并将std::less<>
用作比较器,但编译器(gcc 8.2)抱怨以下错误。我不知道在unordered_map
的情况下摆弄比较器是否有意义。
/afs/software/gcc/8.2.0/lssc0-linux/include/c++/8.2.0/bits/hashtable.h:195:21: error: static assertion failed: hash function must be invocable with an argument of key type
static_assert(__is_invocable<const _H1&, const _Key&>{}
c_counter.cpp: In function ‘void process(char*)’:
c_counter.cpp:158:27: error: no matching function for call to ‘std::unordered_map<std::__cxx11::basic_string<char>, int*, std::less<void> >::find(std::string_view&)’ if (counts->find(k) != counts->end()) {
代码是:
std::unordered_map<std::string, int*, std::less<>> *counts = new std::unordered_map<std::string, int*, std::less<>> ;
// stuff
void prcoess(char* r) {
std::string_view seq(r) ;
for (int i = 0 ; i <= l - 1 - 15 ; i++) {
string_view k = seq.substr(i, 15) ;
if (counts->find(k) != counts->end()) {
// do stuff
}
}
}
在这里使用string_view
的全部目的是避免分配内存并为每个子字符串创建新的字符串,那么有什么方法可以让我查询unordered_map
而又不影响优化?>