134 lines
2.7 KiB
C++
Raw Normal View History

#include<iostream>
#include<stdlib.h>
#include<time.h>
2024-11-20 02:47:51 +08:00
#include<hgl/type/SortedSet.h>
#include<hgl/type/Map.h>
2023-08-10 15:48:19 +08:00
#include<hgl/type/String.h>
#include"UserInfo.h"
using namespace hgl;
using namespace std;
void out_id(Map<int,int> &int_map)
{
const int count=int_map.GetCount();
cout<<"count:"<<count<<" ";
//传统用法
// Pair<int,int> **p=int_map.GetDataList();
// for(int i=0;i<count;i++)
// {
// cout<<"["<</*i<<":"<<*/(*p)->left<<","<<(*p)->right<<"]";
// ++p;
// }
//lambda用法
2023-08-10 15:48:19 +08:00
int_map.Enum([](const int &key,int &value)
{
cout<<"["<<key<<","<<value<<"]";
});
cout<<endl;
}
2023-08-10 15:48:19 +08:00
void IntMapTest()
{
2023-08-10 15:48:19 +08:00
constexpr const int MAX_COUNT=10;
int index;
int value;
2024-11-20 02:47:51 +08:00
SortedSet<int> int_sets;
Map<int,int> int_map;
srand(time(nullptr));
2023-08-10 15:48:19 +08:00
for(int i=0;i<MAX_COUNT;i++)
{
while(true)
{
2023-08-10 15:48:19 +08:00
index=rand()%MAX_COUNT;
if(!int_sets.Contains(index))break;
}
int_sets.Add(index);
value=rand()%255;
cout<<"add index="<<index<<" value="<<value<<endl;
int_map.Add(index,value);
out_id(int_map);
}
2023-08-15 14:50:30 +08:00
cout<<"-----------------------------------------"<<endl;
cout<<"Map<int,int> Change Test"<<endl;
2023-08-10 15:48:19 +08:00
for(int i=0;i<MAX_COUNT;i++)
{
value=rand()%255;
cout<<"update index="<<i<<" value="<<value<<endl;
int_map.Change(i,value);
out_id(int_map);
}
2023-08-10 15:48:19 +08:00
}
void StringMapTest()
{
2024-11-20 02:47:51 +08:00
Map<AnsiString,UserInfo> ui_map;
2023-08-10 15:48:19 +08:00
for(auto &ui:user_info_array)
ui_map.Add(ui.name,ui);
2024-11-20 02:47:51 +08:00
ui_map.Enum([](const AnsiString &key,UserInfo &ui)
2023-08-10 15:48:19 +08:00
{
cout<<"["<<key<<","<<(ui.sex?"male":"female")<<","<<ui.age<<"]"<<endl;
});
2024-11-20 02:47:51 +08:00
for(auto it:ui_map) //测试一下迭代器
{
cout<<"Iterator["<<it->key.c_str()<<","<<(it->value.sex?"male":"female")<<","<<it->value.age<<"]"<<endl;
}
2023-08-10 15:48:19 +08:00
cout<<endl;
2023-08-10 16:39:00 +08:00
}
void StringObjectMapTest()
{
2024-11-20 02:47:51 +08:00
ObjectMap<AnsiString,UserInfoClass> ui_map;
2023-08-10 16:39:00 +08:00
for(auto &ui:user_info_array)
{
UserInfoClass *uic=new UserInfoClass;
uic->Set(ui);
2023-08-10 15:48:19 +08:00
2023-08-10 16:39:00 +08:00
ui_map.Add(ui.name,uic);
}
2024-11-20 02:47:51 +08:00
ui_map.Enum([](const AnsiString &key,UserInfoClass *&ui)
2023-08-10 16:39:00 +08:00
{
cout<<"["<<key<<","<<(ui->GetSex()?"male":"female")<<","<<ui->GetAge()<<"]"<<endl;
});
2023-08-10 15:48:19 +08:00
}
int main(int,char **)
{
2023-08-15 14:50:30 +08:00
cout<<"-----------------------------------------"<<endl;
2023-08-10 16:39:00 +08:00
cout<<"Map<int,int> Test"<<endl;
2023-08-10 15:48:19 +08:00
IntMapTest();
2023-08-15 14:50:30 +08:00
cout<<"-----------------------------------------"<<endl;
2023-08-10 16:39:00 +08:00
cout<<"Map<String,UserInfo> Test"<<endl;
2023-08-10 15:48:19 +08:00
StringMapTest();
2023-08-15 14:50:30 +08:00
cout<<"-----------------------------------------"<<endl;
2023-08-10 16:39:00 +08:00
cout<<"ObjectMap<String,UserInfoClass> Test"<<endl;
StringObjectMapTest();
return(0);
}