를 사용하는 프로그램 : T
및 Q
템플릿 종류 요소 std::pair<T,Q>
를 포함하는 벡터에 대한 포인터를 갖는 템플릿 클래스 map
. std::map
및 T
은 '키'유형이고, Q
은 '값'유형을 나타냅니다. 다음은 구현되어야합니다 :
1. 생성자 & 소멸자.
2. 기능 empty
bool
을 반환합니다 (개체가 비어있는 경우).
기능 size
(count_if
사용)
4. 모든 벡터 레코드를 삭제하는 기능 clear
.
5. 허용 운영자 []
: >>
클래스 템플릿, 쌍, 벡터
나는 위의 작업을 코딩하는 노력했습니다 (equal
기능을 사용하여) map["PI_value"] = 3.14;
이 기능을 find
6. 운영자 =
, ==
, !=
을 사용해야 만했다 아래의 코드에 갇혀있다. 이 혼란을 해결할 아이디어가 있습니까?
#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}'을 (를) 삽입해야하는 이유입니다. '빈'이 잘못되었습니다. 'operator []'는'Q &'를 반환해야합니다 ... – Jarod42