在c ++中使用带队列的映射

时间:2012-11-18 21:14:21

标签: c++ stl map queue

当尝试在下面的代码中运行时,它会编译而没有任何错误。

int main()
{
    queue<map<int,int> >run_time;
}

但是,现在当我尝试使用下面的代码将某些东西推入队列时。

int main()
{
    queue<map<int,int> >run_time;

    run_time.push(make_pair(1,2));
    run_time.push(make_pair(3,4));
}

我收到错误:

no matching function for call to 'std::queue<std::map<int,int,std::less<int>,std::allocator<std::pair<const int,int>

3 个答案:

答案 0 :(得分:2)

问题是make_pair无法创建map。您需要事先创建地图,使用make_pair插入地图,然后将地图本身插入queue

map<int,int> x;
x.insert(make_pair(1,2));
run_time.push(x);

答案 1 :(得分:1)

你有一个地图队列,而不是一对队列。你需要将地图推入其中。

答案 2 :(得分:0)

从问题中给出的代码看起来你想要创建一个Queue,Queue的每个元素都是一个由两个其他元素组成的组。这可以使用类模板轻松完成&#34; pair&#34;或&#34;元组&#34;。

对于 [1],您为元组 [2] template <class T1, class T2> struct pair;

撰写template <class... Types> class tuple;

元组是两个以上成员可以形成组的对的概括。我觉得你的代码错误的是你正在初始化一个地图而不是把它当作一个地图,你想要在队列中推送Map的各个元素,这些元素会破坏创建Map的目的。 Pair和Tuple创建可以与其他类似对象分开处理的单个对象,它们的行为类似于使用 struct 来形成不同数据类型的组。

[1]。 http://www.cplusplus.com/reference/utility/pair/

[2]。 http://www.cplusplus.com/reference/tuple/tuple/