9

我需要从给定字符串中提取一定大小的所有子字符串,并在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不破坏优化的情况下查询?

4

0 回答 0