c ++ std :: map :: find to c#dictionary <key,val>

时间:2018-01-11 18:58:45

标签: c# c++ c++11 dictionary stdmap

再次使用语言转换。

我有一个需要转换为C#的c ++ std :: map。我相信它相当于一本字典。

我真正需要理解的是c ++代码中有map :: find - 我需要在C#中做类似的事情,并且还没有完全理解它。

C ++代码块

map<int, CAG_StatementWriter*> m_Writer;
map<int, DWORD> m_Counter;

other program code ....

int nPhysicalPages = 1 + nTextPages / 2;  //Statement.m_nTotalPages
map<int, CAG_StatementWriter*>::iterator iter = m_Writer.find(nPhysicalPages);
if (iter == m_Writer.end() ||
(nPhysicalPages == 1 && m_Counter[1] % 2000 == 0) ||
(nPhysicalPages == 2 && m_Counter[2] % 1000 == 0)
)
{
// working code here
}

C#代码块

public static Dictionary<int, Writer> sWriter = new Dictionary<int, Writer>();
public static Dictionary<int, int> Counter { get; set; }

other program code... 

int physicalPages = 1 + textPages / 2;
Dictionary<int, Writer>.ValueCollection iter = sWriter.<>(physicalPages);
if (iter == sWriter.<> ||
   (physicalPages == 1 && Counter[1] % 2000 == 0) ||
   (physicalPages == 2 && Counter[2] % 1000 == 0))
{
    // working code here
}

我试图找出取代c ++ :: iterator的地方。我知道ValueCollection不正确;这就是我决定发布问题时的尝试。

2 个答案:

答案 0 :(得分:2)

C#没有像c ++这样的迭代器

查找字典中可能存在或不存在的值

Writer w = null;
if(sWriter.TryGetValue(physicalPage, out w))
{
   // found and w has the found Writer object
}

如果你知道那里(或者不介意投掷,如果不是)

Writer w = sWriter[physicalPage];

答案 1 :(得分:0)

Dictionary的等同于find是TryGetValue。与返回迭代器的find不同,TryGetValue返回一个布尔值,并接受一个out参数,如果它在集合中,则接收该值。