我是一名前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 });
Run Code Online (Sandbox Code Playgroud)
是否有一些东西可以解释为什么使用.NET容器不可能?还是我错过了一些观点?
谢谢.
试图找到另一种简单地序列化我的代码的方法,我有一个愚蠢的想法来尝试这个不可能的事情。但它奏效了。我真的很想知道为什么:
template <typename C>
void f(C c)
{
int a = 1;
float b = 1.5f;
c(a);
c(b);
}
int main()
{
f([](auto v){
std::cerr << v << "\n";
});
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我查看了生成的程序集(g++-9.3 -O0 -g -S -fverbose-asm test.cpp -o test.s),似乎生成了两个不同的 lambda:一个采用浮点数,另一个采用一个整数。这是黑魔法吗?有没有人知道标准并且可以对此进行更多解释?