我有一个C++地图,我希望输入我的类作为值,并输入一个字符串作为键.当我尝试时,我得到一个错误,'Scene_Branding' : illegal use of this type as an expression
我非法使用这种类型作为表达式,我似乎无法找出原因.这是一些代码.
string CurrentScene = "Scene_Branding";
map<string, Scene> Scenes;
Scenes.insert(std::make_pair("Scene_Branding", Scene_Branding)); //<-- Illegal Error parameter 2
Run Code Online (Sandbox Code Playgroud)
这里是场景品牌标题..
#ifndef Scene_Branding_H
#define Scene_Branding_H
#include "Scene.h"
#include <iostream>
#include <string>
class Scene_Branding : Scene
{
public:
Scene_Branding();
~Scene_Branding();
void Draw();
};
#endif
Run Code Online (Sandbox Code Playgroud)
这里是场景标题..
#ifndef Scene_H
#define Scene_H
#include <iostream>
#include <string>
class Scene
{
public:
Scene();
~Scene();
virtual void Draw();
};
#endif
Run Code Online (Sandbox Code Playgroud)
这里有cpp文件.
场景cpp.
#include "Scene.h"
Scene::Scene()
{
}
Scene::~Scene()
{
}
void …
Run Code Online (Sandbox Code Playgroud) 我该怎么做这样的事情:
var a = [1,2,3,4];
a.map(Date.constructor);
Run Code Online (Sandbox Code Playgroud)
此代码在Google V8上引发错误:
SyntaxError: Unexpected number
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
a.map(Date.constructor, Date.prototype)
Run Code Online (Sandbox Code Playgroud)
结果相同.
为什么一种语言使用树而另一种语言使用哈希表来看似相似的数据结构?
c ++的地图与python的字典
一个相关的问题是关于哈希表的性能.
请评论我对下面哈希表的理解.
树保证有O(log n).
哈希表无法保证,除非由于可能的冲突而先前已知输入.
随着问题规模越来越大,我倾向于认为哈希表的性能会接近O(n).
因为我没有听说过随着问题规模的增长动态调整其表大小的哈希函数.
因此,哈希表仅对某些问题大小范围有用,这就是大多数数据库使用树而不是哈希表的原因.
该STL参考似乎使之间的概念上的差异:
而且,似乎我们有:
begin()
返回指向容器中第一个元素的迭代器的方法的所有容器.front()
方法返回对容器中第一个元素的引用.我的理解是,通过仅取消引用其返回值,可以根据front()
方法轻松定义该begin()
方法.
因此,我的问题是:为什么不为front()
定义方法的所有对象定义begin()
方法?(真的应该是每个容器)
(我想从语义的角度来看,从地图中获取第一个元素并不像从矢量中获取第一个元素那样有意义,但我想知道是否有更有效的解释).
我有TreeMap<String,String>
我需要转换为类似URI的字符串,然后返回到Map.我需要设置自定义分隔符.
是否可以为我做任何工具(番石榴,Apache公共?)?我知道,我可以编写简单的循环,但我正在寻找单行程:)
例如
key value
key1 val1
key2 val2
key1_val1|key2_val2
Run Code Online (Sandbox Code Playgroud) 我经常有一个处理一个文件的命令,我想在目录中的每个文件上运行它.有没有内置的方法来做到这一点?
例如,假设我有一个程序data
输出关于文件的重要数字:
./data foo
137
./data bar
42
Run Code Online (Sandbox Code Playgroud)
我想以某种方式在目录中的每个文件上运行它,如下所示:
map data `ls *`
ls * | map data
Run Code Online (Sandbox Code Playgroud)
产生这样的输出:
foo: 137
bar: 42
Run Code Online (Sandbox Code Playgroud) 假设一些数据结构:
typedef struct {
std::string s;
int i;
} data;
Run Code Online (Sandbox Code Playgroud)
如果我在类型映射中data.s
添加实例时使用该字段作为键,那么字符串是否会被复制?擦除地图元素是否安全,因为引用将变为无效?data
std::map<std::string&, data>
这些问题的答案也适用于unordered_map
?
编辑:
这是我目前的解决方案......但是向地图添加迭代器是UGLY:
typedef struct {
const std::string* s;
int i;
} data;
std::map<std::string, data> map;
typedef std::map<std::string, data>::iterator iterator;
// add an element to the map
iterator add_element(const std::string& s) {
std::pair<iterator, bool> p = states.insert(std::make_pair(s, data()));
iterator i = p.first;
if(p.second) {
data& d = (*i).second;
d.s = &(*i).first;
}
return i;
}
Run Code Online (Sandbox Code Playgroud) 我想删除我的std :: map中的一些元素.
我写了erase + remove_if技术,我总是使用其他序列容器.
但它不是用地图编译的.为什么?
我怎么能做这个工作?
std::map<int, int> m;
bool foo(const std::pair<int, int>& p)
{
return p.second > 15;
}
int _tmain(int argc, _TCHAR* argv[])
{
m.insert(make_pair(0, 0));
m.insert(make_pair(1, 10));
m.insert(make_pair(2, 20));
m.insert(make_pair(3, 30));
m.erase(
remove_if(m.begin(), m.end(), foo),
m.end()); // compile error
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我正在处理一些二进制数据,这些数据存储在任意长的无符号整数数组中.我发现我有一些重复的数据,我希望在短期内忽略重复,并删除长期导致它们的任何错误.
我正在考虑在存储之前将每个数据集插入到地图中,但只有在地图中找不到它才会开始.我最初的想法是有一个字符串映射,并使用memcpy作为锤子强制整数进入字符数组,然后将其复制到字符串中并存储字符串.这失败了,因为我的大量数据在相关数据的前面包含多个字节0
(又名NULL
),因此大部分非常真实的数据都被抛弃了.
我计划下一次尝试std::map<std::vector<unsigned char>,int>
,但我意识到我不知道地图插入功能是否有效.
这是可行的,即使不明智,还是有更好的方法来解决这个问题?
编辑
所以有人说我没有弄清楚我在做什么,所以这里有一个更好的描述.
我正在努力生成最小生成树,因为我有许多树包含我正在使用的实际端节点.目标是选择具有最短长度并覆盖所有端节点的树,其中所选择的树彼此最多共享一个节点并且全部连接.我的做法是基于二元决策树,但做了一些改进,希望能够实现更大的并行性.
我没有采用二叉树方法,而是为每个数据集选择了无符号整数的位向量,其中位数为1的1表示包含相应的树.
例如,如果只是树0包含在5树数据集中,我就会开始
00001
从这里我可以生成:
00011
00101
01001
10001
然后可以并行处理这些中的每一个,因为它们中没有一个彼此依赖.我这样做对所有的单树(00010,00100,等),并应,我还没有花时间去正式证明这一点,才能够产生范围内的所有值(0.2 ^ N)的一次而且只有一次.
我开始注意到许多数据集的完成时间比我想象的要长得多,并且启用了调试输出以查看所有生成的结果,并且稍后我确认了一个快速的Perl脚本,我有多个进程生成相同的输出.从那以后,我一直在试图解决在重复从非常小的成功来了,我希望这将很好地工作,足以让我验证是否在没有产生结果,有时,第3天等待计算.
这是一个单一视图应用程序,我按照链接https://developers.google.com/maps/documentation/ios/start上的说明 将Google地图SDK添加到iOS6.错误是:
unrecognized selector sent to class 0xe2b0
2013-02-07 15:21:29.788 mapApp[2061:12e03] *** Terminating app due to uncaught exception
'NSInvalidArgumentException', reason: '+[GMSCameraPosition
cameraWithLatitude:longitude:zoom:]: unrecognized selector sent to class 0xe2b0'
Run Code Online (Sandbox Code Playgroud)
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
self.window.rootViewController = self.viewController;
//initializing google map api key
[GMSServices provideAPIKey:@"google's api key goes here"];
[self.window makeKeyAndVisible];
return YES;
Run Code Online (Sandbox Code Playgroud)
}
ViewController.m
#import "ViewController.h" …
Run Code Online (Sandbox Code Playgroud)