Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我需要一个稍微不同的多重贴图 我正在寻找一个C++容器类,它非常像MultMAP,但略有不同。容器将存储成对的字符串。但是,当我使用键K从容器中检索项目时,我希望找到K以项目自己的键开始的所有项目_C++_String_Data Structures_Multimap - Fatal编程技术网

我需要一个稍微不同的多重贴图 我正在寻找一个C++容器类,它非常像MultMAP,但略有不同。容器将存储成对的字符串。但是,当我使用键K从容器中检索项目时,我希望找到K以项目自己的键开始的所有项目

我需要一个稍微不同的多重贴图 我正在寻找一个C++容器类,它非常像MultMAP,但略有不同。容器将存储成对的字符串。但是,当我使用键K从容器中检索项目时,我希望找到K以项目自己的键开始的所有项目,c++,string,data-structures,multimap,C++,String,Data Structures,Multimap,例如,如果我使用“abcde”键,我想查找键为“adc”和“abcde”的项目,而不是“abcqz” 或伪C++形式: multimap2<string, string> myMultiMap; myMultiMap.insert( pair("abcde", "hello")); myMultiMap.insert( pair("abc", "Hi")); myMultiMap.insert( pair("abcqz", "goodbye")); // prints 2 c

例如,如果我使用“abcde”键,我想查找键为“adc”和“abcde”的项目,而不是“abcqz”

或伪C++形式:

multimap2<string, string>  myMultiMap;
myMultiMap.insert( pair("abcde", "hello"));
myMultiMap.insert( pair("abc",   "Hi"));
myMultiMap.insert( pair("abcqz", "goodbye"));

// prints 2
cout << myMultiMap.count("abcde") << endl;

// prints "hello"  and  "Hi"
cout << myMultiMap.everything_which_matches("abcde") << endl;

// prints "Hi"
cout << myMultiMap.everything_which_matches("abc") << endl;

// prints "goodbye"
cout << myMultiMap.everything_which_matches("abcqz") << endl;
multimap2mymultimap;
myMultiMap.insert(pair(“abcde”、“hello”);
myMultiMap.insert(成对(“abc”、“Hi”);
myMultiMap.insert(成对(“abcqz”,“再见”);
//印刷品2
cout我建议使用一个

基本上,你有一棵树,每个唯一的角色有一个节点。 对于查找和插入,您的算法都是O(m),其中m是字符串的长度

因此,请遵循您的示例:

"abcde", "hello" 
 "abc",  "Hi"
"abcqz", "goodbye"
然后您将有以下trie:

       a
       |
       b
       |
       c       (c holds data of hi)
     /  \
    d    q
    |    |
    e    z (z holds data of goodbye)    (e holds data of hello)
要进行查找,只需从根节点(上面未显示的根节点)开始,然后按照输入字符串中的下一个字符进行查找。每次到达具有数据结果的节点时,都会将其作为输出字符串之一


所以搜索abcde会给你想要的“你好”、“你好”。它不会给您“再见”,因为您没有遍历该结果节点

首先,对于std::multimap,插入和检索的顺序不能不同

其次,任何总体排序都不足以满足您的需要,这意味着它不会将您想要的答案集呈现为间隔

我会用一次查找来搜索所有前缀(你可以通过记住下一个较短前缀的长度等来优化它),或者使用Trie(而不是需要较少空间的PATRICIA Trie)。

打字警告:在“例如,如果我使用键“abcde”开头的行中将“adc”更改为“abc”。