高分求 BCB中的字典类有那几个?

a82344626 2010-09-05 05:51:07
我用这个Generics_collections::TDictionary__2编译时出错

#include <Generics.collections.hpp>
Generics_collections::TDictionary__2<String,String> dir;
直接是他的文件出错!

大家知道有好的最好有例子
...全文
437 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanjackson 2011-11-09
  • 打赏
  • 举报
回复
在xe版本中一样有ccrun所描述的错误,再不行使用TStringList的addObject来处理吧
ccrun.com 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 a82344626 的回复:]
他都通不过了!
他还写那么长的代码...

有病呀
呵呵
会不会是BCB 2010的BUG[/Quote]

正是因为写了这么多代码以后发现编译有问题才很郁闷。应该算是C++Builder2010的BUG。
a82344626 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ccrun 的回复:]
Generics.collections大概是2010中新增的特性,在Delphi中使用TDictionary一切正常,但是生成的Generics.collections.hpp头文件中,TDictionary变成了TDictionary__2并导致链接时找不到TDictionary__2类的实现部分。怀疑这个TDictionary类是EMB的工程师专门给Delphi写的。在C++Builder中……
[/Quote]
他都通不过了!
他还写那么长的代码...

有病呀
呵呵
会不会是BCB 2010的BUG
a82344626 2010-09-06
  • 打赏
  • 举报
回复
知道的说下谢谢了!
呵呵
周药师 2010-09-06
  • 打赏
  • 举报
回复
hash_map基于hash table(哈希表)
用hash_map吧
哈希表最大的优点,就是把数据的存储和查找消耗的时间大大降低,几乎可以看成是常数时间;而代价仅仅是消耗比较多的内存。然而在当前可利用内存越来越多的情况下,用空间换时间的做法是值得的。
我来看看CB 2010-09-06
  • 打赏
  • 举报
回复
不知道什么时候才能稳定。
zzbinfo 2010-09-05
  • 打赏
  • 举报
回复
又向妖哥学到不少
勉励前行 2010-09-05
  • 打赏
  • 举报
回复
不知道这个 Generics.collections::TDictionary 的功效。
但使用C++的 hash_map 应该也不差。不是非要使用delphi的类吧。
倒是希望哪个测试一下,对比一下内存占用及速度。
ccrun.com 2010-09-05
  • 打赏
  • 举报
回复
补充一下,如果是一个字符串匹配一个整形值的字典,可以用TStringHash类,很方便。
ccrun.com 2010-09-05
  • 打赏
  • 举报
回复
Generics.collections大概是2010中新增的特性,在Delphi中使用TDictionary一切正常,但是生成的Generics.collections.hpp头文件中,TDictionary变成了TDictionary__2并导致链接时找不到TDictionary__2类的实现部分。怀疑这个TDictionary类是EMB的工程师专门给Delphi写的。在C++Builder中使用真的是太痛苦了。 查阅EMB的官方文档,一如既往的恶心。我以前就说过Borland/CodeGear/Embarcadero的通病:帮助文档简单并且没有参考价值。怎么说呢,打个比方,有个组件A的属性B,我们不清楚是做什么用的,查一下帮助吧,帮助里说:
B是A的一个属性。
OK了。就这么一句,一句正确的废话。

正常情况下,这个类应该这样用:
#include <Generics.collections.hpp>

void __fastcall TForm1::Button1Click(TObject *Sender)
{
TDictionary__2 <String, String> *pDir = new TDictionary__2 <String, String>(0);
// 添加键和值
pDir->Add("aaa", "111");
pDir->Add("bbb", "222");
pDir->Add("ccc", "333");
pDir->Add("ddd", "444");

// 判断是否存在某个键
bool b1 = pDir->ContainsKey("aaa");
ShowMessage(String().sprintf(TEXT("字典中%s存在键aaa"), b1? TEXT(""): TEXT("不")));

// 判断是否存在某个值
bool b2 = pDir->ContainsValue("111");
ShowMessage(String().sprintf(TEXT("字典中%s存在值111"), b2? TEXT(""): TEXT("不")));

// 尝试获取某个值
String str;
bool b3 = pDir->TryGetValue("ccc", str);
ShowMessage(String().sprintf(TEXT("%s"), b3? str.c_str(): TEXT("获取值失败")));

delete pDir;
}


但是编译会让你失望的,首先错误定位到Generics.collections.hpp文件542行:
__property TValue Items[const TKey Key] = {read=GetItem, write=SetItem/*, default*/};
将这一行屏蔽,OK,再编译,没有编译错误了,但是链接时又出现一堆找不到实现的错误,类似:
[ILINK32 Error] Error: Unresolved external '__fastcall Generics_collections::TDictionary__2<System::UnicodeString, System::UnicodeString>::~TDictionary__2<System::UnicodeString, System::UnicodeString>()' referenced from xxx\xxx.OBJ
....


头大啊,楼主不用搞了,换一个思路,自己实现字典吧。
我不懂电脑 2010-09-05
  • 打赏
  • 举报
回复
BCB中有map可以通过key查找对象。

13,870

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧