使用类模板,对,矢量的程序

时间:2013-12-17 14:54:34

标签: class templates c++11 vector std-pair

我正在尝试编写以下内容: 模板类map,其指向包含元素std::pair<T,Q>的向量,其中TQ是模板类型。它应该与std::map类似,T是'key'类型,而Q代表'value'类型。此外还应实施以下内容:
 1.构造函数&amp;析构函数。
 2.函数empty返回bool(如果对象为空)  3.功能size(使用count_if
 4.删除所有矢量记录的函数clear  5.运营商[]允许:map["PI_value"] = 3.14;它应该使用函数find
 6.运营商===!=>>(使用equal功能)

我一直在尝试编写上述任务,但一直坚持下面的代码。 你有什么想法来修复这个烂摊子吗?

#include <iostream>
#include <tuple>
#include <utility>
#include <algorithm>
#include <vector>


using namespace std;

template <typename T, typename Q>
class mapa
{
private:
    vector<std::pair<T,Q>>* ptr;
    public:
    /**< DEFAULT CONSTRUCTOR/////////////////////////// */
    mapa()
    {
        ptr = new vector<std::pair<T,Q>>;
        ptr->push_back(std::pair<T,Q>(0,0));
    }
    /**< DESTRUCTOR////////////////////////////////////// */
    ~mapa(){ delete ptr;}
    /**< EMPTY()////////////////////////////// */
    bool empty()
    {
        if(ptr)
            return false;
        else
            return true;
    }
    /**< SIZE()///////////////////////////////// */
    int size()
    {
        return ptr->size();
    }
    /**< CLEAR()///////////////////////////////// */
    void clear()
    {
        ptr->clear(ptr->begin(), ptr->end());
    }
    /**< OPERATOR[]/////////////////////////////////////////// */
    vector<std::pair<T,Q>>* & operator[](T key)
        {
        auto ptr2 = ptr;
        if(empty())
        {
            std::pair<T,Q> para;

            para.first = key;
            para.second = 0;
          ptr2->push_back(para);
          //ptr2->push_back(std::pair<T,Q>(key,0));
        }
        else
        {

            auto ptr2 = find_if( ptr->begin(), ptr->end(),
            [](std::pair<T,Q> example,T key)
                            {
                               return(example.first==key);
                            }
                            );
        }
        return ptr2;
    }
}; //class end

1 个答案:

答案 0 :(得分:0)

提供给std::find_if的lambda声明错误。

如果您看到例如this reference for std::find_if,您会看到函数应该像

bool pred(const Type &a)

这意味着lambda应该像

[&key](const std:pair<T, Q>& element) { return element.first == key }

您的operator[]函数还存在其他问题,例如它应该返回Q&而不是对向量指针的引用。您还应该记住std::find_if返回找到的元素的迭代器,如果找不到则返回end()