我正在尝试编写以下内容:
模板类map
,其指向包含元素std::pair<T,Q>
的向量,其中T
和Q
是模板类型。它应该与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
答案 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()
。