我想知道使用其他类型的容器(例如,队列)作为地图的值是否合适。我声明了这样的地图:map<string, queue<string>> id
。这是使用地图的合适方式吗?实际上,我的代码如下。
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <map>
#include <queue>
using namespace std;
int main(){
map<string, queue<string>> m;
char temp[1024];
strcpy(temp, "hello world");
m[temp].push(temp);
return 0;
}
答案 0 :(得分:1)
我想知道使用其他类型的容器(例如,队列)作为地图的值是否合适。
是。这是使用地图的合适方式。
值类型可以是任何可分配的类型。 std::queue
和其他容器可分配。该类型还必须使用提供的Compare
参数进行比较。标准容器与默认std::less
相当。
正如评论中所指出的,根据您使用的成员函数,还有其他要求。除非有我错过的例外,否则所有标准容器都能满足所有要求。
对于那些想知道,使用带有容器值的地图的合适方法,我建议进行心理练习:
首先想象一下你需要一个容器的情况。我在这个例子中使用了std::string
。例如,您可以使用std::string
来表示英语句子。
其次,想象一下您希望将某些键与值相关联的情况。这就是地图容器可用于的目的。
第三,想象一下地图的值是容器对象的情况。例如,您可能有一个字符串映射,其中语言代码映射到相应语言的句子。这是容器映射的适当使用(特别是字符串映射)。
我在这个例子中使用了字符串,但它也适用于其他容器,例如队列。
答案 1 :(得分:0)
不确定
#include <queue>
#include <map>
#include <string>
using std::string
std::map<string, std::queue<string>> mymap;
然后你可以写
mymap["aaa"].push("bbb");
基本上,map
是为对象提供额外标识符的另一种方法。
答案 2 :(得分:0)
这个问题没有足够的信息来说明是或否(你可能从评论中选择了这一点);所以最好的可以说是“可能”。
你觉得你需要问的事实表明你对你的设计有了第二个想法。如果您对自己的设计有了第二个想法,那么在编写更多代码之前,通常需要停下来并做好准备。
例如,如果您发现自己正在考虑使用相同的键创建十几张地图;那么你可能最好创建一个包装所有值的单个对象。
另一方面,如果你只想要一个字符串到字符串队列的地图......那你为什么还要做其他事情呢?