c 重载get setset容器的find函数可以查找满足某一条件的元素么

DataTable类中有没有类似PB中的find函数,寻找符合条件的行?
100qingshan]
DataTable类中有没有类似PB中的find函数,寻找符合条件的行?
100qingshan]
编辑:www.fx114.net
本篇文章主要介绍了"DataTable类中有没有类似PB中的find函数,寻找符合条件的行?
100qingshan]",主要涉及到DataTable类中有没有类似PB中的find函数,寻找符合条件的行?
100qingshan]方面的内容,对于DataTable类中有没有类似PB中的find函数,寻找符合条件的行?
100qingshan]感兴趣的同学可以参考一下。
DataTable类中有没有类似PB中的find函数,寻找符合条件的行?有,参考DataTable.Select&方法&
[Visual&Basic,&C#]&以下示例使用筛选表达式和记录状态来返回&DataRow&对象的数组。
[Visual&Basic,&C#]&注意&&&此示例显示如何使用&Select&的一个重载版本。有关其他可用示例,请参阅单独的重载主题。
private&static&void&GetRowsByFilter()
&&&&DataTable&customerTable&=&new&DataTable(&"Customers"&);
&&&&//&Add&columns
&&&&customerTable.Columns.Add(&"id",&typeof(int)&);
&&&&customerTable.Columns.Add(&"name",&typeof(string)&);
&&&&//&Set&PrimaryKey
&&&&customerTable.Columns[&"id"&].Unique&=&
&&&&customerTable.PrimaryKey&=&new&DataColumn[]&{&customerTable.Columns["id"]&};
&&&&//&Add&ten&rows
&&&&for(&int&id=1;&id&=10;&id++&)
&&&&&&&&customerTable.Rows.Add(&
&&&&&&&&&&&&new&object[]&{&id,&string.Format("customer{0}",&id)&}&);
&&&&customerTable.AcceptChanges();
&&&&//&Add&another&ten&rows
&&&&for(&int&id=11;&id&=20;&id++&)
&&&&&&&&customerTable.Rows.Add(&
&&&&&&&&&&&&new&object[]&{&id,&string.Format("customer{0}",&id)&}&);
&&&&string&strE
&&&&string&strS
&&&&strExpr&=&"id&&&5";
&&&&//&Sort&descending&by&column&named&CompanyName.
&&&&strSort&=&"name&DESC";
&&&&//&Use&the&Select&method&to&find&all&rows&matching&the&filter.
&&&&DataRow[]&foundRows&=&
&&&&&&&&customerTable.Select(&strExpr,&strSort,&DataViewRowState.Added&);
&&&&PrintRows(&foundRows,&"filtered&rows"&);
&&&&foundRows&=&customerTable.Select();
&&&&PrintRows(&foundRows,&"all&rows"&);
private&static&void&PrintRows(&DataRow[]&rows,&string&label&)
&&&&Console.WriteLine(&"\n{0}",&label&);
&&&&if(&rows.Length&&=&0&)
&&&&&&&&Console.WriteLine(&"no&rows&found"&);
&&&&foreach(&DataRow&r&in&rows&)
&&&&&&&&foreach(&DataColumn&c&in&r.Table.Columns&)
&&&&&&&&&&&&Console.Write(&"\t&{0}",&r[c]&);
&&&&&&&&Console.WriteLine();
}具体怎么实现不清楚,有个提示:
DataTable&dt&=&new&DataTable("df");
dt.DefaultView.RowFilter&=&"column1&=&1";
.............see(msdn):
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemDataDataTableClassSelectTopic.htmDataTable.Select&或者&DefaultView.RowFilter&
查询条件的写法查看帮助文档DataColumn.Expression谢谢楼上;
&&&DataTable&customerTable&=&new&DataTable(&"Customers"&);
&&&&//&Add&columns
&&&&customerTable.Columns.Add(&"id",&typeof(int)&);
&&&&customerTable.Columns.Add(&"name",&typeof(string)&);
&&&&//&Set&PrimaryKey
&&&&customerTable.Columns[&"id"&].Unique&=&
&&&&customerTable.PrimaryKey&=&new&DataColumn[]&{&customerTable.Columns["id"]&};
&&&&//&Add&ten&rows
&&&&for(&int&id=1;&id&=10;&id++&)
&&&&&&&&customerTable.Rows.Add(&
&&&&&&&&&&&&new&object[]&{&id,&string.Format("customer{0}",&id)&}&);
&&&&customerTable.AcceptChanges();
&&&&//&Add&another&ten&rows
&&&&for(&int&id=11;&id&=20;&id++&)
&&&&&&&&customerTable.Rows.Add(&
&&&&&&&&&&&&new&object[]&{&id,&string.Format("customer{0}",&id)&}&);
//有没有这样函数,得到在表中的第几行
fnum&=&DataTable.Find("id&=&'5'");
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:今天看啥 热点:
STL之vector,数组线性容器array,list容器,算法find,find_if,bind1st,仿函数,find_ifbind1st

1.STL(Standard Template Library,是用泛型技术来设计完成的实例)的概念与组成
Iterator(迭代器)
Container(容器)
Algorithm(算法)
Adaptors(配接器)
STL的六大组件分别是:
容器(Container)
算法(Algorithm)
迭代器(Iterator)
仿函数(Function object)
适配器(Adapter)
空间配置器(allocator):只能分配内存等
2.容器与算法
案例如下:
#include&iostream&
#include&vector&//容器
#include&array&//数组
#include&algorithm&
usingnamespacestd;
//实现一个模板类,专门实现打印的功能
template&classT&&//类模板实现了方法
classmyvectorprint
operator ()(constT
&t)//重载,使用(),打印
&&&&&&&std::cout
&& t &&std::endl;
voidmain()
&&&vector&int&&myvector;
&&&myvector.push_back(11);
&&&myvector.push_back(21);
&&&myvector.push_back(31);
&&&myvector.push_back(81);
&&&myvector.push_back(51);
&&&array&int,
10& myarray = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
&&&myvectorprint&int&print;//对于打印进行实例化
&&&//begin,endl迭代器,是一个指针
&&&for_each(myvector.begin(),myvector.end(),print);
&&&std::cout
&& &---------------------& &&std::endl;
&&&for_each(myarray.begin(),myarray.end(),print);
&&&cin.get();
&&&//算法可以适用于任何一个容器,for_each是一个算法
序列式容器(Sequence containers)
每个元素都有固定位置----取决于插入实际和地点,和元素之无关
Vector,deque,list
关联式容器(Associated containers)
元素位置取决于特定的排序准则,和插入顺序无关
set、multiset、map、multimap
4.vectors:
将元素置于一个动态数组中加以管理
可以随机存取元素(用索引直接存取)
数组尾部添加或移除元素非常快速,但是在中部或头部安插元素比较费时。
5.数组线程容器
#include&iostream&
#include&vector&
#include&array&
#include&tuple&
usingnamespacestd;
voidmain()
&&&//数组,静态数组,栈上
&&&array&int,
5& myarray = { 1, 2, 3, 4, 5 };
&&&//动态数组,堆上
&int&myvector;
&&&myvector.push_back(1);
&&&//不需要变长,容量较小时,使用array
&&&//不需要变长,容量较大是,使用vector
6.list容器(添加和迭代输出)
#include&iostream&
#include&hash_set&
#include&list&&&&//实际上是一个双向链表
#include&stdio.h&
//list使用于经常插入,经常删除
usingnamespacestd;
voidmain()
&&&list&int&mylist;
&&&mylist.push_back(1);
&&&mylist.push_back(2);
&&&mylist.push_back(3);
&&&mylist.push_back(4);
&&&mylist.push_front(4);//往头部插入
&&&//指针,指向一个迭代器,迭代器存储了位置
&&&autoibegin
=mylist.begin();
&&&autoiend
=mylist.end();
&&&//list用迭代器进行遍历
(;ibegin !=iend;ibegin++)
&&&&&&&cout
&& *ibegin &&endl;
&&&&&&&printf(&%p,&p\n&,ibegin._Ptr,ibegin);//重载
&&&cin.get();
运行结果是:
7.list删除应该注意的地方
#include&iostream&
#include&hash_set&
#include&list&&&&//实际上是一个双向链表
#include&stdio.h&
//list使用于经常插入,经常删除
usingnamespacestd;
voidmain()
&&&list&int&mylist;
&&&mylist.push_back(1);
&&&mylist.push_back(2);
&&&mylist.push_back(3);
&&&mylist.push_back(4);
&&&mylist.push_back(5);
&&&//auto i = mylist.begin();删除元素,依赖于迭代器
&&&//++i
&&&//++i
&&&//++i
=mylist.end();//end最后一个没有实体
&&&mylist.erase(i);//链式存储,不允许下标访问
&&&//只能用迭代器,链表迭代器只能用++,--
&&&//mylist.clear();清空
&&&//指针,指向一个迭代器,迭代器存储了位置
&&&autoibegin
=mylist.begin();
&&&autoiend
=mylist.end();
(;ibegin !=iend;ibegin++)
((*ibegin) == 3)
&&&&&&&&&&&mylist.erase(ibegin);//删除,删除的时候迭代器会发生
&&&&&&&&&&&break;//这里一定要记住,要使用因为list原来的结构已经发生了变化
&&&&&&&//cout &&*ibegin &&
&&&&&&&//指针,指向一个迭代器,迭代器存储了位置
&&&&&&&autoibegin
=mylist.begin();
&&&&&&&autoiend
=mylist.end();
&&&&&&&for
(;ibegin !=iend;ibegin++)
&&&&&&&&&&&cout
&& *ibegin &&endl;
&&&cin.get();
运行结果:
8.通过数组的方式为list初始化
#include&iostream&
#include&hash_set&
#include&list&&&&//实际上是一个双向链表
#include&stdio.h&
//list使用于经常插入,经常删除
usingnamespacestd;
voidmain()
&&&inta[5]
= { 1, 2, 3, 4, 5 };
&&&list&int&mylist(a,a
+ 5);//根据数组初始化
&&&//传递开始地址,传递结束地址
&&&//mylist(0)
&&&//mylist[1];只能用迭代器访问
&&&mylist.push_back(10);
&&&mylist.push_front(12);//在前添加数值
&&&//指针,指向一个迭代器,迭代器存储了位置
&&&autoibegin
=mylist.begin();
&&&autoiend
=mylist.end();
(;ibegin !=iend;ibegin++)
(*ibegin == 3)
&&&&&&&&&&&mylist.insert(ibegin,
&&&&&&&&&&&break;//删除或者插入,迭代器都会发生变化
&&&mylist.remove(30);//直接一个函数,根据元素来删除
&&&&&&&autoibegin
=mylist.begin();//指针,指向一个迭代器,迭代器存储了位置
&&&&&&&autoiend
=mylist.end();
&&&&&&&for
(;ibegin !=iend;ibegin++)
&&&&&&&&&&&cout
&& *ibegin &&endl;
&&&cin.get();
运行结果:
9.数组初始化,并逆向输出
#include&iostream&
#include&hash_set&
#include&list&&&&//实际上是一个双向链表
#include&stdio.h&
//list使用于经常插入,经常删除
usingnamespacestd;
voidmain()
&&&inta[5]
= { 1, 2, 3, 4, 5 };
&&&list&int&mylist(a,a
+ 5);//根据数组初始化
=mylist.rbegin();
=mylist.rend();
&&&//同时正向方向查找
(;rb !=re;rb++)
&&&&&&&cout
&& *rb &&endl;
&&&cin.get();
运行结果:
10.list合并,排序
#include&iostream&
#include&hash_set&
#include&list&&&&//实际上是一个双向链表
#include&stdio.h&
//list使用于经常插入,经常删除
usingnamespacestd;
voidmain()
&&&inta[5]
= { 1, 2, 3, 104, 5 };
&&&list&int
& mylist1(a,a
+ 5);//根据数组初始化,
&&&intb[5]
= { 11, 122, 33, 44, 55 };
&&&list&int
& mylist2(b,b
+ 5);//根据数组初始化,
&&&mylist1.sort();
&&&mylist2.sort();//两个list合并到list之前需要数组排序
&&&mylist1.merge(mylist2);//合并之前必须有序
&&&&&&&autoibegin
=mylist1.begin();//指针,指向一个迭代器,迭代器存储了位置
&&&&&&&autoiend
=mylist1.end();
&&&&&&&for
(;ibegin !=iend;ibegin++)
&&&&&&&&&&&cout
&& *ibegin &&endl;
&&&\n\n\n&;
&&&&&&&autoibegin
=mylist2.begin();//指针,指向一个迭代器,迭代器存储了位置
&&&&&&&autoiend
=mylist2.end();
&&&&&&&for
(;ibegin !=iend;ibegin++)
&&&&&&&&&&&cout
&& *ibegin &&endl;
&&&cin.get();
运行结果:
11.list中通过unique()方法去掉重复的元素
#include&iostream&
#include&hash_set&
#include&list&&&&//实际上是一个双向链表
#include&stdio.h&
//list使用于经常插入,经常删除
usingnamespacestd;
voidmain()
&&&inta[6]
= { 1, 2, 98, 2, 5, 98 };
&&&list&int&mylist1(a,a
+ 6);//根据数组初始化
&&&&&&&autoibegin
=mylist1.begin();
&&&&&&&autoiend
=mylist1.end();
&&&&&&&for
(;ibegin !=iend;ibegin++)
&&&&&&&&&&&cout
&& *ibegin &&endl;
&&&mylist1.sort();
&&&mylist1.unique();//唯一依赖于排序,通过这个方法实现了去掉重复的
&&&\n\n\n&;
&&&&&&&//指针,指向一个迭代器,迭代器存储了位置
&&&&&&&autoibegin
=mylist1.begin();
&&&&&&&autoiend
=mylist1.end();
&&&&&&&for
(;ibegin !=iend;ibegin++)
&&&&&&&&&&&cout
&& *ibegin &&endl;
&&&cin.get();
运行结果:
list迭代输出
#include&iostream&
#include&set&
#include&stdio.h&
#include&list&
#include&vector&
#include&algorithm&
#include&functional&
usingnamespacestd;
voidmain()
&&&list&int&mylist;
&&&mylist.push_back(1);
&&&mylist.push_back(2);
&&&mylist.push_back(3);
&&&mylist.push_back(4);
&&&//mylist[1];
&&&autoibegin
=mylist.begin();//指针,指向一个迭代器,迭代器存储了位置
&&&autoiend
=mylist.end();
&&&//list用迭代器进行遍历
(;ibegin !=iend;ibegin++)
&&&&&&&cout
&& *ibegin &&endl;
&&&&&&&printf(&%p,%p\n&,ibegin._Ptr,ibegin);//重载
&&&cin.get();
运行结果:
12算法find
#include&algorithm&
#include&iostream&
usingnamespacestd;
structprint
operator()(intx)//重载了()符号,直接调用()
&&&&&&&std::cout
&& x &&endl;
voidprintA(intx)
&&&std::cout
&& x &&endl;
//find这个算法
voidmain()
&&&inta[10]
= { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
*p =find(a,a
+ 10, 8);
&&&std::cout
&& (void*)a
&& (void*)(a
+ 10) && std::endl;
&&&std::cout
&& *p &&endl;
&&&std::cout
&& p &&endl;
+ 10))
&&&&&&&std::cout
&& &没有找到\n&;
&&&//下面的方式是调用重载的print函数
&&&for_each(a,a
+ 10,print());//遍历每一个元素
&&&//printA是一个函数指针,必须是函数类型
&&&std::cout
&& &-------------------------& &&std::endl;
&&&for_each(a,a
+ 10,printA);
&&&cin.get();
运行结果:
13.find_if,bind1st,仿函数
#include&iostream&
#include&set&
#include&stdio.h&
#include&list&
#include&vector&
#include&algorithm&&&//find_if的头文件
#include&functional&&//仿函数需要这里
usingnamespacestd;
boolless3(intx)
&&&returnx
voidmain()
&&&vector&int&mylist;
&&&mylist.push_back(1);
&&&mylist.push_back(2);
&&&mylist.push_back(16);
&&&mylist.push_back(17);
&&&mylist.push_back(18);
=mylist.begin();
=mylist.end();
(;ib !=ie;ib++)
&&&&&&&std::cout
&& *ib &&std::endl;
&&&//防函数可以实现一定的算法策略
&&&//bind1st表示要绑定一个函数
&&&//绑定一个函数,greater&int&(),3,表示比三大的数
&&&//查找第一个比3大的数值,下面的代码的意思是找到第一个3比取出的数值大的数的位置
&&&autoifind
=find_if(++mylist.begin(),mylist.end(),bind1st(greater&int&(),
&&&std::cout
&& &\n\n\n\n& && *ifind
&&&std::cout
&& &---------------------& &&std::endl;
&&&autoifind2
=find_if(mylist.begin(),mylist.end(),less3);
&&&std::cout
&& &\n\n\n\n& && *ifind
&&&cin.get();
find()只能找出与之匹配的第一个元素的地址,而且find()中的参数只能是整个元素(如find(100)//整型,find(my)//my_struct类型 所以找首元素只能用find_if():[编写必要的一元函数对象(function object)] 如果要找符合的所有元素,用replace_copy_if(), remove_if(), remove_copy_if() 等函数进行需要的转换,下面是整个程序: 其中用了两个function object,分别是等于与不等于目标值。本来写一个就行了,第二个用not1(),但是我写的函数对象不是模板类,所以不能用(visual studio 2008)。 之所以将函数对象定义为非模板类,是由于其中的my_struct是定了的(要用到:my_struct::a),int也是定了的,没有必要定义为模板类。代码中的变量名意思不明确,输出结果时没有提示,请见谅! #include &iostream& #include &functional& #include &algorithm& #include &vector&
struct my_struct { my_struct():a(0), b(0) { }
}; struct my_equal_to { public: my_equal_to(int n):num(n) { } bool operator () (const my_struct& my) const { if (my.a == num)
}; struct my_not_equal_to { public: my_not_equal_to(int n):num(n) { } bool operator () (const my_struct& my) const { if (my.a == num)
}; int main () { vector&my_struct& my_ temp.a = 1000; temp.b = 100; my_struct temp1; temp1.a = 100; temp1.b = 10; my_struct temp2; temp2.a = 20; temp2.b = 1; my_struct temp3; temp3.a = 20; temp3.b = 3; my.push_back(temp); my.push_back(temp1); my.push_back(temp2); my.push_back(temp3); vector&my_struct&::reverse_iterator riter = find_if (my.rbegin(), my.rend(), my_equal_to(100)); if (riter != my.rend()) cout && riter-&a && '......余下全文>>
相关搜索:
相关阅读:
相关频道:
&&&&&&&&&&&&&&&&
WEB编程教程最近更新set容器应用实例
set容器应用实例
编辑:www.fx114.net
本篇文章主要介绍了"set容器应用实例",主要涉及到set容器应用实例方面的内容,对于set容器应用实例感兴趣的同学可以参考一下。
#include//pair要用到
class BlackList{
BlackList(){}
~BlackList(){}
void Init();//初始化,set容器对象,用insert函数
print()//添加const表示不改变成员变量,同时const也可用于重载(即带const与不带const实现重载)
bool findbl(string name);//查找是否在容器内,可用count函数实现
bool deletebl(string name);//删除元素,用erase函数
void BlackList::Init()
cout&&"please input the black name:\n";
while(cin&&name&&name!=string("1"))
pair::iterator,bool&
it=blacklist.insert(name);//带一个键值参数的函数,返回一个pair类型
if(it.second==false)
cout&&"there is already exist!\nplease input the next
void BlackList::print()const
set::const_iterator it=blacklist.begin();
while(it!=blacklist.end())
cout&&*it++&&'\t';
bool BlackList::findbl(string name)
if(blacklist.count(name))//计数,若存在则为1,不存在为0
bool BlackList::deletebl(string name)
if(findbl(name))
blacklist.erase(name);
int main()
bl.Init();//初始化
bl.print();//遍历
cout&&"please input what your find:\n";
if(bl.findbl(name))//查找
cout&&"exist\n";
cout&&"not exist\n";
cout&&"please input what your want to delete:\n";
if(bl.deletebl(name))//删除
cout&&"delete success\n";
cout&&"delete false\n"&&
bl.print();
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:(c++)关于stl里set容器的自定义排序
我的图书馆
(c++)关于stl里set容器的自定义排序
& & &最近结合stl看数据结构,对许多原本半生不熟的知识都有了点领悟,大家知道stl里无论是向量还是容器的sort算法都很有用也很方便.但是似乎大家一直都是用int类型来初始化这些对象,那我用自定义的一个结构来对初始化这些对象,并且想对结构里的某一个元素的大小来排序,该怎么办呢,我上网查了些资料,并根据自己的学习与琢磨,找到了比较简单的方法.那么不说废话,看代码:
[cpp] #include&iostream&&&#include&set&&&using&namespace&&&struct&stu{&&&&&&char&a[10];&&&&&&int&s;&&&&};&&class&stu1:greater&stu&&&{&&public:&&&&&&bool&&&&operator&()&(stu&b1,stu&b2)&const{&&&&&&&&&&return&b1.s&b2.s;&&&&&&}&&};&&main()&&{&&&&&&set&stu,stu1&&&a;&&&&&&for(int&i=0;i&3;i++){&&&&&&&&&&stu&d;&&&&&&&&&&cin&&d.a&&d.s;&&&&&&&&&&a.insert(d);&&&&&&}&&&&&&set&stu,stu1&&::iterator&l;&&&&&&for(l=a.begin();l!=a.end();l++){&&&&&&&&&&cout&&l-&a&&"&"&&l-&s&&&&&&&&}&&&&&&}&&
代码比较简单就是对stl里greater(当然也可以是less)继承,并且重载()运算符即可.
TA的最新馆藏[转]&
喜欢该文的人也喜欢

我要回帖

更多关于 map容器的运算符重载 的文章

 

随机推荐