Chapter9-2
TMap<T,S>创建一个表来存放数据。这个比较类似于我们的Key/Value存储方式。
举一个简单的例子
TMap<FString,int>items;
items.Add(“aa”,4);
items.Add(“dd”,23);
那么你要根据键去获取数值就是使用 items[“aa”]答案就是4
小提示,如果在方括号中获取一个不存在的键,那么会崩溃,因此这个地方一定要做好容错的判别。
TMap迭代使用
For(TMap<FString,int>::TIterator it=items.CreateIterator();it;++it)
{
GEngine->AddOnScreenDebugMessage(count++,30.f,FColor::Red,it->key+FString(“: ”)+FString::FromInt(it->Value));
}
C++ STL 版本的公共使用容器
C++ STL set
C++中的set是一堆独一无二并且可以排序的条目。很好的关于STL set 的特征是保持这个set的元素是有序的。快速并且很取巧的方式是将这一堆数据直接推进同一个set之中,这个set将会很小心地将他们有序地排列给你。
我们用一个很简单的c++的控制台程序来演示:
#inlcude<iostream>
#inlcude<set>
Using namespace std;
Int main()
{
Set<int> intSet;
intSet.insert(8);
intSet.insert(8);
intSet.insert(2);
intSet.insert(7);
For(set<int>::iterator it=intSet.begin();it!=intSet.end();++it)
{
Cout<<*it<<endl;
}
}
输出的结果是 278
刚刚重复的数字8已经被自动筛掉了
找到一个在set中的元素
Set<int>::iterator it=intSet.find(7);
If(it!=intSet.end())
{
Cout<<”FOUND”<<*IT<<endl;
}
练习:告诉你的用户一个set中有三个独一无二的名称。获取他们每个人的名字,一个接着一个,在这之后打印他们在一个有序的数组中。如果你的用户重复输入名称,那么告诉他们输入另外一个,知直到输入3个为止
#include<iostream>
#include<string>
#include<set>
Using namespace std;
Int main()
{
Set<string>names;
While(names.size()<3)
{
Cout<<name.size()<<”name so far , enter a name”<<endl;
String name;
Cin>>name;
Names.insert(name);
}
For(set<string>::iterator it=names.begin();it!=names.end();++it)
{
Cout<<*it<<endl;
}
}
C++ 中的STL map
C++中的STL map与UE4中的TMap对象有很大的相似之处。其中一个不同之处在于,map比TMap要多一个自动排序(对键进行排序),这当然会有额外的一些开销,但是如果你希望你的map进行排序那么选择STL是一个不错的选择。
#include<iostream>
#include<string>
#include<map>
Using namespace std;
Int main()
{
Map<string,int>items;
Items.insert(make_pair(“apple”,12));
Items.insert(make_pair(“orange”,1));
Items.insert(make_pair(“banana”,3));
Itemns[“kiwis”]=44;
For(map<string,int>::iterator it=items.begin();it!=items.end();++it)
{
Cout<<”items”<<it->first<<” ”<<it->second<<endl;
}
练习:告诉用户输入五个条目以及他们的数量进入一个空的map之中
#include<iostream>
#include<string>
#include<map>
Using namespace std;
Int main()
{
Map<string,int>items;
Cout<<”输入5个条目,以及他们的数量”<<endl;
While(items.size()<5)
{
Cout<<”输入条目”<<endl;
String item;
Cin>>item;
Cout<<”输入数量”<<endl;
Int qty;
Cin>>qty;
Items[item]=qty;
}
For(map<string,int>::iterator it=items.begin();it!=items.end();++it)
{
Cout<<”items”<<it->first<<” ”<<it->second<<endl;
}
}
}