• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

TDictionary是delphi用的,c++builder用起来太吃力。

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 

TDictionary 是delphi用的,c++builder用起来太吃力。
c++还是用std::map代替。
c++d map很好用啊。
https://blog.csdn.net/ddkxddkx/article/details/6555754

#include <map> 

void __fastcall TForm2::FormCreate(TObject *Sender) 
{ 
    std::map<String, String> *Dir = new std::map<String, String>; 
    delete Dir; 
} 

Or:

#include <map> 

void __fastcall TForm2::FormCreate(TObject *Sender) 
{ 
    std::map<String, String> Dir; 
}

Copy the following code in your DelphiUnit.pas file:

unit DelphiUnit;
 
interface
 
uses
  System.Generics.Collections;
 
type
  TCity = class
    Country: String;
    Latitude: Double;
    Longitude: Double;
  end;
 
  // You cannot use TDictionary<String, TCity> in C++ unless you first
  // instantiate it in Delphi as follows:
  CityDictionary = class(TDictionary<String, TCity>)
  end;
 
implementation
 
end.
View Code

 

Then right-click your DelphiPackage project on the Project Manager and select Build.

Add the generated Delphi package library file to your C++ console application:

  1. Right-click your CppApplication project on the Project Manager and select Add.
  2. On the dialog box that opens, select the DelphiPackage.lib file that you previously built and click OK. You may find this file inside "C:\Users\Public\Documents\Studio\14.0\Dcp".
    Note: If you cannot see the expected file, ensure that the file filter in the dialog box is "Any file (*.*)".

Copy the following code in your main.cpp file:

#pragma hdrstop
#pragma argsused
 
#ifdef _WIN32
#include <tchar.h>
#else
  typedef char _TCHAR;
  #define _tmain main
#endif
 
#include <iostream>
#include <DelphiUnit.hpp>
 
const double EPSILON = 0.0000001;
 
 int _tmain(int argc, _TCHAR* argv[]) 
{
    // Create the dictionary.
    TDictionary__2<UnicodeString, TCity*>* dictionary = new TDictionary__2<UnicodeString, TCity*>(0);
    TCity* city;
 
    // Add some key-value pairs to the dictionary.
 
    city = new TCity;
    city->Country = "Romania";
    city->Latitude = 47.16;
    city->Longitude = 27.58;
    dictionary->Add("Iasi", city);
 
    city = new TCity;
    city->Country = "United Kingdom";
    city->Latitude = 51.5;
    city->Longitude = -0.17;
    dictionary->Add("London", city);
 
    city = new TCity;
    city->Country = "Argentina";
    city->Latitude = 0;             // Wrong coordinates
    city->Longitude = 0;    // on purpose.
    dictionary->Add("Buenos Aires", city);
 
    // Display the current number of key-value entries.
    std::wcout << "Number of pairs in the dictionary: " << dictionary->Count << "." << std::endl;
 
    // Try looking up "Iasi".
    if (dictionary->TryGetValue("Iasi", city))
            std::wcout << "Iasi is located in " << city->Country
                       << " with latitude = " << city->Latitude
                       << " and longitude = " << city->Longitude
                       << "." << std::endl;
    else
        std::wcout << "Could not find Iasi in the dictionary." << std::endl;
 
    // Remove the "Iasi" key from the dictionary.
    dictionary->Remove("Iasi");
 
    // Make sure that the capacity of the dictionary is set to the number of entries.
    dictionary->TrimExcess();
 
    // Test if "Iasi" is a key in the dictionary.
    if (dictionary->ContainsKey("Iasi"))
        std::wcout << "The key \"Iasi\" is in the dictionary." << std::endl;
    else
        std::wcout << "The key \"Iasi\" is not in the dictionary." << std::endl;
 
    if (dictionary->ContainsKey("London")) {
 
        // Test how (United Kingdom, 51.5, -0.17) is a value in the dictionary...
        dictionary->TryGetValue("London", city);
        if (city->Country == "United Kingdom" && (city->Latitude - 51.5) < EPSILON && (city->Longitude - -0.17) < EPSILON)
            std::wcout << "The value (United Kingdom, 51.5, -0.17) is in the dictionary." << std::endl;
        else
            std::wcout << "Error: The value (United Kingdom, 51.5, -0.17) is not in the dictionary." << std::endl;
 
        // ...but ContainsValue returns False if passed a different instance of
        // TCity with the same data, as different instances have different references.
        city = new TCity;
        city->Country = "United Kingdom";
        city->Latitude = 51.5;
        city->Longitude = -0.17;
        if (dictionary->ContainsValue(city))
            std::wcout << "Error: A new instance of TCity with values (United Kingdom, 51.5, -0.17) matches an existing instance in the dictionary." << std::endl;
        else
            std::wcout << "A new instance of TCity with values (United Kingdom, 51.5, -0.17) does not match any existing instance in the dictionary." << std::endl;
 
        delete city;
    }
    else {
        std::wcout << "Error: The key \"London\" is not in the dictionary." << std::endl;
    }
 
    // Update the coordinates to the correct ones.
    city = new TCity;
    city->Country = "Argentina";
    city->Latitude = -34.6;
    city->Longitude = -58.45;
    dictionary->AddOrSetValue("Buenos Aires", city);
 
    // Generate the exception "Duplicates not allowed".
    try {
            dictionary->Add("Buenos Aires", city);
    } catch (Exception &e) {
            std::wcout << "Could not add entry. Duplicates are not allowed." << std::endl;
    }
 
    // Display all countries.
    std::wcout << "All countries:" << std::endl;
    DynamicArray<TCity*> cityValues = dictionary->Values->ToArray();
    const int cityCount = cityValues.get_length();
    for (int i = 0; i < cityCount; i++) {
        std::wcout << cityValues[i]->Country << std::endl;
    }
 
    // Iterate through all keys in the dictionary and display their coordinates.
    std::wcout << "All cities and their coordinates:" << std::endl;
    DynamicArray<UnicodeString> cityKeys = dictionary->Keys->ToArray();
    for (int i = 0; i < cityCount; i++) {
        dictionary->TryGetValue(cityKeys[i], city);
        std::wcout << cityKeys[i] << ": " << city->Latitude << ", " << city->Longitude << std::endl;
    }
 
    // Clear all entries in the dictionary.
    dictionary->Clear();
 
    // There should be no entries at this point.
    std::wcout << "Number of key-value pairs in the dictionary after cleaning: " << dictionary->Count << std::endl;
 
    std::cin.get();
    return 0;
}
View Code

 


http://docwiki.embarcadero.com/CodeExamples/XE6/en/Generics_Collections_TDictionary_%28C%2B%2B%29

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
临界区对象TCriticalSection(Delphi)与TRtlCriticalSection的区别发布时间:2022-07-18
下一篇:
DelphicxGrid加行号发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap