-1
我試圖設定以下的程序: 具有指向包含元素std::pair<T,Q>
,其中T
和Q
是模板類型的載體模板類map
。它的工作原理與std::map
類似,T
是'key'類型,而Q
代表'value'類型。除此之外還應執行:
1.構造函數&析構函數。
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
你的'empty()'函數總是返回'true',除非該向量的內存分配失敗。 –
而這導致另一件事:爲什麼使用矢量指針? –
爲什麼'ptr'是一個指針,爲什麼在構造函數中插入'{0,0}','empty'是錯誤的。 'operator []'應該返回'Q&' – Jarod42