小编Coo*_*kie的帖子

C#:字典按键排序~~(1)查找

没有找到答案.

我喜欢KeyedCollection,因为它保持了插入顺序并且具有~O(1)个键查找时间.

现在我正在寻找一个类似的类型,它将对键而不是插入顺序进行排序.

SortedDictionary就是这样做的,但是实现与我想要的完全相反.插入是O(1),查找O(log n).但是,我想查找~O(1)(例如哈希表),插入可以是O(log n)(二叉树?).

这存在吗?不应该是明智的实施......

谢谢

c# dictionary sorted

3
推荐指数
1
解决办法
746
查看次数

构造函数初始化顺序和引用传递

嗨,我有一个关于构造函数初始化顺序的问题.如下所示

struct B {}
struct A
{
    B& b;
    A(B& b) : b(b) {}
}
struct C
{
    B b;
    A a;
    C() : b(),a(b) {}
}
struct D
{
    A a;
    B b;
    D() : a(b),b() {}
}
Run Code Online (Sandbox Code Playgroud)

我知道C是有效的,因为b在a之前被初始化.但D怎么样?b还没有建成,但地址应该已经知道了,所以它应该是安全的吗?

谢谢

c++ constructor

3
推荐指数
1
解决办法
179
查看次数

使用AND或OR折叠布尔向量

真的很简单,但我很难崩溃一个布尔矢量.AND(c(T,T,F))似乎为AND做了伎俩,但OR(c(T,T,F))不存在.

r

3
推荐指数
1
解决办法
768
查看次数

C++警告如果在函数中重新声明成员变量

给出如下结构

class A {
  int test;
  void f() { int test; }
}
Run Code Online (Sandbox Code Playgroud)

我只是有一个奇怪的情况,其中f()中的代码,当引用测试时,在VS2010下编译,正确引用函数局部变量,但是,当在gcc下编译时,错误地引用了成员变量.我花了很长时间才追查.

无论如何,问题是,每次在本地函数范围内重新声明成员变量时,gcc或VS中是否有一个选项可以启用编译器警告?

c++ compiler-construction scope declaration

2
推荐指数
1
解决办法
1393
查看次数

C++基本字符串异常

如果我只是想抛出一个字符串,那么在某个地方是不是有内置类型,所以我可以这样做

throw standard_exception("This is wrong!");
Run Code Online (Sandbox Code Playgroud)

或者我是否必须定义这样的标准异常,该异常源自异常本身?我知道这样做非常简单,我只是认为这将是如此常见,以至于它将在某处定义.

谢谢

c++ exception

1
推荐指数
2
解决办法
560
查看次数

解决跨命名空间的模糊运算符

我创建了自己的<<重载bool因为我希望它打印truefalse不是10.这通常有效,除非我离开我定义此运算符的命名空间.在那种情况下,我得到一个模糊的操作错误.

error C2593: 'operator <<' is ambiguous
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(206): could be 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::_Bool)'
with
[
    _Elem=char,
    _Traits=std::char_traits<char>
]
c:\Dummy.h(43): or       'std::ostream &Dummy::operator <<(std::ostream &,bool)'
while trying to match the argument list '(std::basic_ostream<_Elem,_Traits>, bool)'
with
[
    _Elem=char,
    _Traits=std::char_traits<char>
]
Run Code Online (Sandbox Code Playgroud)

如何指定从哪个命名空间中获取运算符?我天真地尝试过Dummy::<<,Dummy::operator<<但都没有奏效.

c++ namespaces operator-keyword

1
推荐指数
1
解决办法
201
查看次数

如何实现一个简单的<运算符

我有一个包含一些简单成员的类,并希望实现一个非常简单的<运算符.这就是我的开始:

inline bool operator< (const T& lhs, const T& rhs)  { return std::tie(lhs.GetA(), lhs.GetB()) < std::tie(rhs.GetA(), rhs.GetB()); }
Run Code Online (Sandbox Code Playgroud)

视觉工作室抱怨

Warning 2   warning C4239: nonstandard extension used : 'argument' : conversion from 'A' to 'A &'
Run Code Online (Sandbox Code Playgroud)

似乎问题是我没有使用成员,而是使用函数,并且正在将rvalue传递给非const ref.我想我可以在本地A中保存GetA(),但不愿意.

我该如何解决?

我尝试添加

A& GetARef() const { return a; }
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为我试图返回一个非const引用与const.

A& GetARef() { return a; }
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为lhs并且rhs是常量.

现在我想也许我应该使用std::tuple或者可能std::tie( std::cref(lhs.GetA()) ),或者可能是一个新模板

template < typename... T >
std::tuple<const T&...> ctie( const T&... args )
{ …
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading c++11

1
推荐指数
1
解决办法
108
查看次数

在非成员函数中声明全局变量

我可以在非成员函数中声明一个全局变量吗?

或者换句话说,非成员函数的静态等价物?

而且我希望变量不是常量 - 例如可修改......

c++

1
推荐指数
1
解决办法
103
查看次数

使用<< operator with指向char的指针

有一个运算符重载,<<它解释char*为C风格的字符串.char*但是,如果指向单个字符,如何将其输出到流中?

c++ pointers char

0
推荐指数
1
解决办法
133
查看次数