C ++:使用队列作为地图的值

时间:2018-01-23 11:44:54

标签: c++

我想知道使用其他类型的容器(例如,队列)作为地图的值是否合适。我声明了这样的地图: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;   
}

3 个答案:

答案 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)

这个问题没有足够的信息来说明是或否(你可能从评论中选择了这一点);所以最好的可以说是“可能”。

你觉得你需要问的事实表明你对你的设计有了第二个想法。如果您对自己的设计有了第二个想法,那么在编写更多代码之前,通常需要停下来并做好准备。

例如,如果您发现自己正在考虑使用相同的键创建十几张地图;那么你可能最好创建一个包装所有值的单个对象。

另一方面,如果你只想要一个字符串到字符串队列的地图......那你为什么还要做其他事情呢?