Tag: stl

C#是否有std :: nth_element等价物?

我正在将一些C ++代码移植到C#。 C#是否具有std::nth_element()的等价物,还是需要自己滚动?

任何人都可以解释为什么C#中的Dictionary 不像STL中的map 那样工作?

去年我第一次开始使用C#编程时,我立即寻找了与STL相同的地图,并学习了Dictionary。 更新了下面的垃圾,我完全错了。 我对STL地图的体验是,当我向它请求值时,我讨厌,如果键不在地图中,它会自动创建值类型(无论其默认构造函数如何)并将其添加到地图中。 我必须在代码中检查这个条件并抛出exception。 字典使整个shebang正确 – 如果键不存在,它会在您请求值时抛出异常,或者如果不是,则自动添加它并且您想要设置该值。 但你们都已经知道了。 我应该在发布之前编写我的unit testing并让自己感到尴尬。 :)他们现在写的! 现在我喜欢Dictionary和all,但是现在最让我烦恼的是,如果键不在Dictionary中,它会抛出KeyNotFoundException。 因此,我总是需要编写这样的代码: Dictionary _mydic; public string this[string key] { get { return _mydic[key]; // could throw KeyNotFoundException } set { if( _mydic.ContainsKey( key)) _mydic[key] = value; else _mydic.Add( key, value); } } 如果键不存在,为什么Dictionary不会自动添加键值对,如STL的映射? 现在有趣的是,在以前的生活中,我曾经生气,因为我经常不得不试图阻止地图这样做。 我想我现在的用例有点不同。

STL deque是作为循环链表实现的吗?

我无法找到如何在C ++ STL中实现deque的内部结构。 我之前在某处读过,在C#中它被实现为循环列表。 它也适用于C ++ STL吗? 另外,你能解释一下为什么会这样吗? 编辑:由C ++ STL,我的意思是随Visual Studio C ++ 2010一起提供的STL库,以及与gcc一起发布的STL库

在c#字典中只查找或插入一个查找

我是一名前C ++ / STL程序员,试图使用c#/ .NET技术编写快速行进算法… 我正在搜索等效的STL方法“map :: insert”,如果不存在,则在给定键处插入值,否则返回现有键值对的迭代器。 我找到的唯一方法是使用两个查找:一个在TryGetValue中,另一个在Add方法中: List list; if (!_dictionary.TryGetValue (pcost, out list)) { list = new List (); dictionary.Add (pcost, list); } list.Add (new Point { X = nx, Y = ny }); 是否有一些东西可以解释为什么使用.NET容器不可能? 还是我错过了一些观点? 谢谢。

stl C ++和C#容器之间的映射

有人能指出通常的C ++ STL容器之间的良好映射,例如vector,list,map,set,multimap ……和C#generic容器? 我习惯了以前的那些,不知怎的,我已经习惯用这些容器来表达算法。 我很难找到与之相当的C#。 谢谢!

如何将vector 从C ++ dll编组到C#应用程序?

我有一个C ++函数,它产生一个有趣的矩形列表。 我希望能够从C ++库中获取该列表并返回到调用它的C#应用​​程序。 到目前为止,我正在编码矩形,如下所示: struct ImagePatch{ int xmin, xmax, ymin, ymax; } 然后编码一些向量: void MyFunc(…, std::vector& rectanglePoints){ std::vector patches; //this is filled with rectangles for(i = 0; i < patches.size(); i++){ rectanglePoints.push_back(patches[i].xmin); rectanglePoints.push_back(patches[i].xmax); rectanglePoints.push_back(patches[i].ymin); rectanglePoints.push_back(patches[i].ymax); } } 用于与C#交互的标题看起来像(并且适用于许多其他函数): extern “C” { __declspec(dllexport) void __cdecl MyFunc(…, std::vector& rectanglePoints); } 是否有一些关键字或其他我可以做的东西来取出那组矩形? 我发现这篇文章是用于在C#中编组对象,但它看起来太复杂了,太过于缺乏解释。 整数向量是正确的方法,还是有其他技巧或方法?