매핑 된 데이터를 입력 된 순서대로 트래버스하는 코드를 작성했습니다.사용자 지정 STL 컨테이너
내가 코딩 솔루션 몇 번이었다 :
감안할 때 키 타입, K, 및 데이터 타입, D, 표준 : :지도 표준 : : 벡터
하나가 무작위로를 원한 데이터 입력을 찾으려면 map.find(K)
을 사용하십시오. 항목을 입력 순서대로 통과하려고 할 때 std::vector::iterator (begin(), end()]
을 사용하십시오.
이것은 좋았지 만, 연습으로 이걸 'OrderedMap'
을 STL 준수 컨테이너로 쓰고 싶었습니다. 나는 또한 (이 토론 벗었) 한 :
template <typename K, typename D>
class OrderedMap
{
public:
typename OrderedMapValue<K,D>& OrderedMap<K,D>::operator[](const K&);
// snip...
};
class MyClass
{
public:
MyClass(std::string s) : _my_data(s) {}
private:
std::string _my_data;
};
다음 코드는 작동
template <typename K, typename D>
class OrderedMapValue
{
private:
K first_ref;
std::map<K,size_t>& m;
std::vector<D>& v;
public:
const K& first
D& second
assignment operator=(const D& data)
{
std::map<K,size_t>::const_iterator iter = m.find(first_ref);
v[iter.second] = data; // error checking of iter stripped
}
};
는 또한
가정 : 그러나OrderedMap<std::string,MyClass*> omap;
omap["MyKey"] = new MyClass("dummy");
,이 코드는하지 않습니다
OrderedMap::iterator iter = omap.find("MyKey");
MyClass * obj = iter->second;
delete obj;
iter->second = new MyClass("dummy");
내가 돈을 가지고 있다고 가정합니다. e 무언가 a) 구조적으로 어리 석거나 b) 불필요하게 복잡하다. 어떻게해야 하는가?
나는 바퀴를 재발 명할 가능성이 크다는 것을 알고 있지만,이 노력은 주로 STL 용기에 대한 지식과 디자인 패턴 및 적절한 사용법을 향상시키는 데 있습니다. 어떤 통찰력 사전에
감사합니다, OrderedMapValue::operator=
에서
반복자의 사용은'iter-이어야한다 > 두 번째? 'iter'는'OrderedMap :: iterator'이고'iter'는'OrderedMapValue'입니까? –
맞습니다. 답을 입력하십시오. –
당신이 맞습니다, 나는 당신의 대답을 받아 들였습니다. 개념적으로, 당신은 정말로 필요한 것에 대한 본질을 정말로 잡았습니다. TYPE 및 연산자 [] 메서드를 자세히 살펴본 결과 받아 들여진 솔루션으로 표시된 코드가 사람들을 오도하지 않도록 몇 가지 문제가 있음을 깨달았습니다. 내 의도는 입증 된 솔루션을 제공하는 것이었지만 이제 막 돌아가고 있습니다. –