Learning C++ by Creating Games With UE4(15.05.18)-2(Chapter 9-2)Coding

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 mapUE4中的TMap对象有很大的相似之处。其中一个不同之处在于,mapTMap要多一个自动排序(对键进行排序),这当然会有额外的一些开销,但是如果你希望你的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;

}

 

 

}

}

你可能感兴趣的:(UE4)