不确定如何解释它 - 我对C++很新,但是......让我试试:
假设我有300多个名字(杰夫,杰克......),其中有300多个int值(0或1).在JS中我会使用JSON.像这样的东西:
var people = {"person": [
{"name": "Jeff","val": 0},
{"name": "Jill","val": 1},
{"name": "Jack","val": 0},
{"name": "Jim","val": 1},
{"name": "John","val": 0}
]}
Run Code Online (Sandbox Code Playgroud)
在C++中执行此操作的最佳方法是什么?谢谢.
如果您可以使用重复的名称,则无法使用地图,因此您可以使用以下内容:
struct Person
{
Person( const std::string & n, int v ) : name(n), val(v) {}
std::string name;
int val;
};
int main()
{
std::vector<Person> people;
people.push_back( Person( "Jeff", 0 ) );
people.push_back( Person( "Jill", 1 ) );
...
}
Run Code Online (Sandbox Code Playgroud)
如果你想要名字的唯一性,你可以这样做:
std::map<std::string, int> people;
people["Jeff"] = 0;
people["Jill"] = 1;
Run Code Online (Sandbox Code Playgroud)
要么
std::map<std::string, Person> people;
people["Jeff"] = Person("Jeff",0);
people["Jill"] = Person("Jill",1);
Run Code Online (Sandbox Code Playgroud)
如果你经常使用这个代码,你可以清理重复的瑕疵.
template<typename K, typename V>
struct BuildMap
{
BuildMap() : map_() {}
BuildMap<K,V>& operator()( const K & key, const V & value )
{
map_[key]=value;
return *this;
}
std::map<K,V> operator()() { return map_; }
std::map<K,V> map_;
};
std::map<std::string,int> people = BuildMap<std::string,int>()
( "Jeff", 0 )
( "Jill", 1 )
( "John", 1 )
();
Run Code Online (Sandbox Code Playgroud)
希望这会给你一些想法.