1

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

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>

4

3 回答 3

4

问题是它make_pair不会创建一个map. 您需要事先创建地图,使用 插入其中make_pair,然后将地图本身插入queue.

map<int,int> x;
x.insert(make_pair(1,2));
run_time.push(x);
于 2012-11-18T21:16:02.743 回答
3

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

于 2012-11-18T21:16:21.600 回答
0

从问题中给出的代码看来,您想要创建一个 Queue ,其中 Queue 的每个元素都是一组其他两个元素。这可以使用类模板“pair”或“tuple”轻松完成。

对于template <class T1, class T2> struct pair;[1],您在为元组[2]编写时template <class... Types> class tuple;

元组是对的泛化,其中两个以上的成员可以组成组。我觉得您的代码中的错误是您正在初始化地图但没有将其用作地图,您想将地图的各个元素推送到队列中,这破坏了创建地图的目的。Pair 和 Tuple 创建可以与其他类似对象分开处理的单独对象,它们的行为类似于使用struct来形成不同数据类型的组。

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

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

于 2015-06-02T13:13:13.540 回答