삽입 순서대로 요소를 저장하는 연관 배열 (예 : std :: map)을 만들 것입니다. 나는 새로운 요소를 삽입 표준 : :지도 믹스 반복자 때문에 대신에 표준 : :지도를 unordered_map도 사용삽입 순서 std :: map
template <typename K, typename V>
class My_Map : public std::unordered_map<K,V>
{
public:
V& operator[](const K&& key)
{
typename std::unordered_map<K,V>::iterator __i = find(key);
if (__i == std::unordered_map<K,V>::end()) //se non l'ho trovato...
{
__i = insert(__i, std::make_pair(std::move(key), V()));
mHistory.push_back(__i);std::cout<<"Sto inserendo: "<<key<<std::endl;
}
return (*__i).second;
}
typename std::unordered_map<K,V>::iterator cbegin() const
{
return *mHistory.cbegin();
}
typename std::unordered_map<K,V>::iterator cend() const
{
return *mHistory.cend();
}
private:
std::list<typename std::unordered_map<K,V>::iterator> mHistory;
};
using namespace std;
int main()
{
My_Map<string,int> myMap;
myMap["1"] = 1;
myMap["23"] = 23;
myMap["-3"] = 3;
myMap["23"] = 28;
myMap["last element"] = 33;
for (auto x = myMap.cbegin(); x != myMap.cend(); ++x)//{std::cout<<"sn dentro\n";}
cout<<(*x).first <<"\t"<<x->second<<endl;
}
:이 클래스를 썼다.
이 코드에는 문제가 있습니다. main()에서 for for segmentation fault가 실패합니다. cbegin()과 cend()로 전달 된 반복자는 유효하지 않습니다 ... 왜? 뭐가 문제 야?
정확히 Boost.multi_index를 확인하십시오. –
[MCT] (https://launchpad.net/libmct/)에도 연결된지도가 있습니다. – doublep
컨테이너 (가상 소멸자가없는 것)와 같은 컨테이너에서 파생시키지 않는 것이 좋습니다. 일반적으로 선행 밑줄이있는 변수 이름은 컴파일러 및 표준 라이브러리 용으로 예약 된 것으로 간주됩니다. 내가 틀렸을 수도 있지만 당신이 std :: vector를 사용할 수 있기를 원한다면 정렬되지 않은 맵은 삽입 순서를 보장하지 않는다고 확신한다. 그러나 pair와 같은 연관 배열로 키 의미에 의한 액세스를 갖지는 않을 것이다. PHP 또는 그 밖의 것들. – 111111