查找这块操作和代码量比较多,需要花时间去记,很烦 。。
使用STL容器,让相同数据的累加不需要将数组初始化,直接进行累加,查找输入的数据是否已经存在也只需要一个语句就可以完成,代码简短了许多 , 用STL容器查找用数组的形式,将字符串设为数组地址,查找时直接用字符串查找。
第一种:用count函数来判定关键字是否出现,其缺点是无法定位数据出现位置,由于map的特性,一对一的映射关系
,就决定了count函数的返回值只有两个,要么是0,要么是1,出现的情况,当然是返回1了
第二种:用find函数来定位数据出现位置,它返回的一个迭代器,当数据出现时,它返回数据所在位置的迭代器,
如果map中没有要查找的数据,它返回的迭代器等于end函数返回的迭代器,
int LCA( Tree T, int u, int v )
{
如果树为空
返回 ERROR ;
如果 u,v不在数组内
返回 ERROR ;
如果 u或v有等于T->key
返回T->key
如果一个在根节点左边一个在根节点右边
返回T->key
如果 u比T->key大 递归调用右子树
如果 u比T->key小 递归调用左子树
}
int Search(Tree T , int u) //查找元素是否存在于树内
{
如果树空
返回 0
如果找到则返回 1
如果大于T->key
递归调用右子树
如果小于T->key
递归调用左子树
}
只考虑一个大于根节点,一个小于根节点的情况和两个都小于根节点,两个都大于根节点情况 ,没有考虑到节点不在树内和节点不同层情况
增加了一个寻找元素是否在树内的函数 ,解决
map<string,int>p; 储存账号 和密码
string ch,number,str; //ch是新老用户 ,number是账号 , str是密码
输入指令次数n
while (n-- )
{
输入x,y,z ;
如果是老用户
{
判断它是否存在 if(iter != mapStudent.end())
不存在则printf("ERROR: Not Exist\n");
存在则判断密码是否正确if(mapStudent[number]==str)
正确输出printf("Login: OK\n")
错误输出printf("ERROR: Wrong PW\n")
}
如果是新用户
{
判断是否已经存在if(iter != mapStudent.end())
存在则输出printf("ERROR: Exist\n");
不存在的话mapStudent[number] = str记录下密码 ; printf("New: OK\n");
}
}
原文:https://www.cnblogs.com/FOXES/p/9094562.html