我需要从给定字符串中提取一定大小的所有子字符串,并在std::unordered_map<string, int*>
. 我尝试使用此答案中的建议并用作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
不破坏优化的情况下查询?