优先级队列Multimap类,包含C ++中具有相同键值的多个项目

时间:2014-05-02 01:55:04

标签: c++ map queue

我正在编写一个c ++优先级队列多地图类,它能够处理相同键值的多个项目。我有一个push方法,它将在multimap中创建项目,pop方法将返回具有最高键值的项目。我希望能够添加具有相同键值的多个项目。如果两个项具有相同的键值,则只应弹出一个,另一个应保留在队列中。

这是我的pop方法的代码。

    string PQ::pop()
   {
int maxKey = 0;
string maxValue;

if(pq.size() > 0)
{
    for(std::multimap<int, string>::iterator iter = pq.begin(); iter != pq.end(); iter++)
    {
        if(iter->first >= maxKey)
        {
            maxKey = iter->first;
            maxValue = iter->second;

        }
    }
}
else
{
    maxValue = "The queue is empty";
}
pq.erase(maxKey);
return maxValue;
    }

当我在main方法中运行此代码时:

    pq.push(1, "one");
    pq.push(3, "three");
    pq.push(3, "three2");
    pq.push(50, "fifty2");
    pq.push(50, "fifty");

    cout << pq.pop() << endl;
    cout << pq.pop() << endl;
    cout << pq.pop() << endl;
    cout << pq.pop() << endl;
    cout << pq.pop() << endl;

这是打印出来的:

fifty2 三 一个

应该是:

fifty2 五十 三 three2 之一。

1 个答案:

答案 0 :(得分:0)

简而言之:pq.erase(maxKey)使用等于maxKey的键删除所有元素 - 而不仅仅是一个元素。

首先pop()仅返回fifty2,但同时删除fifty2fifty,第二pop()仅返回three,但同时删除three }和three2,第三个pop()返回并删除one,第四个和第五个pop()只返回空字符串。