最近unordered_map
在C++中的讨论使我意识到,我应该使用之前使用unordered_map
过的大多数情况map
,因为查找的效率(摊销的O(1)与O(log n)).大多数时候我使用的地图我使用int
或std::string
作为键,因此我对哈希函数的定义没有任何问题.我越是想到它,我就越发现我发现std::map
在一个简单类型的情况下我找不到任何理由std::unordered_map
- 我看了一下界面,并没有发现任何显着的差异会影响我的代码.
因此,这个问题-有没有使用任何真正的原因std::map
在std::unordered map
简单类型一样的情况下,int
和std::string
?
我从一个严格的编程角度问我 - 我知道它没有被完全认为是标准的,并且它可能会带来移植问题.
另外我希望正确的答案之一可能是"它对于较小的数据集更有效",因为开销较小(是真的吗?) - 因此我想将问题限制在密钥数量的情况下是非平凡的(> 1 024).
编辑: 呃,我忘记了显而易见的(感谢GMan!) - 是的,地图是当然有序的 - 我知道,我正在寻找其他原因.
我正在实现一个基于OpenGL构建的GUI.我遇到了每个GUI都有的问题 - 文本渲染.我知道在OpenGL中渲染文本的几种方法,但是,我想知道哪种方法最适合GUI.
通常在GUI中我们有两种类型的文本 - 静态和实时.静态很容易 - 我们可以将TTF渲染到纹理并忘记它.这是"现场"文本,更让我烦恼 - 想象控制台,或多人游戏中的实时聊天.
我想到了几个选择:
因此问题是 - 如何有效地在OpenGL中呈现文本?
如果这有帮助,我将使用STL/Boost-heavy C++进行编码,并针对GForce 6及更高版本的显卡.
我想将函数值作为模板参数传递给函数.目前我设法做的最好的是:
template< typename F, F f >
void pass()
{
...
}
Run Code Online (Sandbox Code Playgroud)
...使用的:
pass< decltype(&func), &func >();
Run Code Online (Sandbox Code Playgroud)
我真正想要的是:
pass< &func >();
Run Code Online (Sandbox Code Playgroud)
有没有办法在没有宏的情况下实现这个目标?基本上同时传递类型和值?编译器显然拥有所需的所有信息......
解决方案必须使用变量参数和返回类型.函数值在编译时使用,因此不能作为参数传递.
欢迎使用C++ 11解决方案.
编辑:用例 - 我在编译时生成绑定,我需要为每个传递的函数创建一个C++函数.这段代码的用例看起来(简化)或多或少像这样:
template < typename F, F f >
int function_wrapper( lua_State* L )
{
return dispatcher<typename return_type<F>::type>::call( L, 1, f );
}
void register_native_function( lua_Function f, const char* name )
{
// binding call using pure C function f
}
template < typename F, F f >
void register_function( const …
Run Code Online (Sandbox Code Playgroud) 我对Sinatra(红宝石框架)感到困惑.
它是一个轻量级的Rails替代品还是你可以让它们并排运行?
你可以做一个Web应用程序(如在Rails中)吗?比如一个twitter克隆?
我正在为游戏设计一个对象结构,在我的案例中,最自然的组织变成了一棵树.作为智能指针的忠实粉丝我shared_ptr
独家使用.但是,在这种情况下,树中的孩子将需要访问它的父母(例如 - 地图上的生物需要能够访问地图数据 - 他们的父母的数据.
拥有的方向当然是地图拥有它的存在,所以拥有它们的共享指针.要从存在中访问地图数据,我们需要一个指向父节点的指针 - 智能指针的方式是使用引用,ergo a weak_ptr
.
然而,我曾经读到锁定a weak_ptr
是一项昂贵的操作 - 可能这不再是真的 - 但考虑到weak_ptr
它将经常被锁定,我担心这种设计注定会失败.
因此问题是:
锁定weak_ptr会有什么性能损失?它有多重要?
我们中的许多人都被灌输使用XML来存储数据.它的好处和缺点是众所周知的,我当然不想在这里讨论它们.但是在我用C++编写的项目中,我也使用了Lua.我很惊讶Lua可以用来存储和处理数据.然而,至少在游戏编程世界中,Lua的这一方面不太被认可.
我知道XML在诸如通过互联网发送数据的情况下以及在安全起作用的地方(例如使用从网络下载的数据,或加载用户可编辑的配置文件)以及最后的情况下具有优势.不同语言的程序正在读取相同的数据.
然而,一旦我学会了使用Lua处理数据是多么好和容易(特别是让luabind支持你!),我开始怀疑是否有任何理由使用XML来存储游戏数据,如果我们已经使用了Lua呢?
暴雪在使用Lua编写UI脚本时,仍然以XML格式存储布局.是什么原因只有UI相关?
使用Lua作为数据存储语言有什么缺点?
选择顶点缓冲区类型有哪些常用指南?我们什么时候应该使用隔行扫描缓冲区来处理顶点数据?什么时候我们应该使用索引数组和直接顶点数据?
我正在寻找一些常见的quidelines - 在某些情况下,其中一个或相反的更适合,但并非所有情况都很容易解决.在针对性能时,应该考虑选择顶点缓冲区格式?
还欢迎链接到该主题的Web资源.
令我惊讶的是,这个程序在MSCV和GCC中编译:
class A
{
public:
int add() { return 0; }
template<typename T>
T add() { return T(); }
};
int main() {
A a;
a.add();
a.add<int>();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
显然,由于模板化方法的类型不能被推导出来并且需要明确说明,所以情况并非如此 - 似乎有点阴暗 - 如果它是一个非模板化方法,那将是显而易见的不正确.
我已经尝试使用谷歌搜索并查看标准的最后一个草案,但找不到答案 - 模板方法和普通方法的命名相同,只是在C++中返回类型合法,或者编译器只是宽容?
我有一个LaTeX文件,'myfile.tex'说,有时在代码中间,必须输入带有LaTeX宏的ASCII文件,'macrofile.tex,比方说,通过'\ _输入{macrofile}'命令.实际上,有多个'macrofiles',所以每次我必须编辑'myfile'并更改'macrofile'的名称.我可以通过使用\ typein命令来避免编辑部分,但是,我仍然需要从键盘输入名称.有没有办法从命令行执行此操作?总而言之,'myfile.tex'看起来像:
\documentclass{article}
........................
.......................
.......................
\begin{document}
.......................
......................
.......................
.......................
........................
.......................
\input{macrofile1} OR {macrofile2} OR {macrofile3} ETC...
.......................
......................
......................
....................
.....................
\end{document}
Run Code Online (Sandbox Code Playgroud)
我可以将'macrofile'的名称作为参数传递给'myfile.tex'吗?
谢谢
约翰
我认为代码会更好地说明我的需求:
template <typename F>
struct return_type
{
typedef ??? type;
};
Run Code Online (Sandbox Code Playgroud)
以便:
return_type<int(*)()>::type -> int
return_type<void(*)(int,int)>::type -> void
Run Code Online (Sandbox Code Playgroud)
我知道的decltype
和result_of
,但他们需要有传递的参数.我想从单个模板参数推断出函数指针的返回类型.我无法将返回类型添加为参数,因为这正是我想要隐藏的内容......
我知道有一个提升解决方案,但我不能使用它,并试图从提升中挖掘它导致了一个壮观的失败(通常如此).
欢迎使用C++ 11解决方案(只要VS2012支持).
c++ ×6
performance ×3
c++11 ×2
opengl ×2
templates ×2
arguments ×1
boost ×1
command-line ×1
dictionary ×1
latex ×1
lua ×1
ruby ×1
sinatra ×1
weak-ptr ×1
xml ×1