为什么不引用值成员作为您的键?
class key { friend bool operator< (const key &,const key&); }
class value {
public:
value(const key &k) : k(k) {}
const key &key() const {return k};
private:
key k;
}
std::map<key,value> m;
key k;
value v(k);
m.insert(std::pair<key,value>(v.key(),v));
…或者一些。似乎在值对象内构造键通常比较容易。
更像:
#include <map>
#include <iostream>
struct key {
key(unsigned int ik) : k(ik) {}
unsigned int k;
friend bool operator< (const key &,const key &);
};
bool operator< (const key &me,const key &other) {return me.k < other.k;}
struct value {
value(unsigned int ik, unsigned int iv) : k(ik), v(iv) {}
const key &theKey() const {return k;}
unsigned int v;
key k;
};
int main() {
std::map<key,value> m;
value v(1,3);
m.insert(std::pair<key,value>(v.theKey(),v));
for(std::map<key,value>::iterator it=m.begin(); it!=m.end();++it)
std::cout << it->second.theKey().k << " " << it->second.v << "\n";
return 0;
}