【发布时间】:2011-09-18 12:44:39
【问题描述】:
我是一名前 C++/STL 程序员,尝试使用 c#/.NET 技术编写快速行进算法...
我正在寻找等效于 STL 方法“map::insert”的方法,如果不存在,则在给定键处插入值,否则返回现有键值对的迭代器。
我发现的唯一方法是通过两种查找来实现这一点:一种在 TryGetValue 中,另一种在 Add 方法中:
List<Point> list;
if (!_dictionary.TryGetValue (pcost, out list))
{
list = new List<Point> ();
dictionary.Add (pcost, list);
}
list.Add (new Point { X = n.x, Y = n.y });
有没有什么可以解释为什么使用 .NET 容器无法做到这一点?还是我错过了什么?
谢谢。
【问题讨论】:
-
你确定它即使在生产代码中也会进行两次查找?
-
双重查找真的很重要吗?时间上的差异是微不足道的。
-
@Chris:什么?您没有任何基准来支持这一点,更不用说与 OP 的使用模式相关的基准了;)——我可以向您展示重要的代码(哦等等,我不能法律原因...)
-
其实我还没有做基准测试:也许cli机器缓存了最后一个结果作为下次查找的提示,这可能会抑制添加操作的成本。
标签: c# performance stl comparison lookup