我想做一个颜色值的地图.例如,0到25之间的值将表示从浅色到深色的蓝色变化.我从来没有这样做过,所以我想对基础知识提出一些建议和解释.感谢帮助.
请参阅以下代码以更好地理解我的问题.
class compareByValue {
public:
bool operator()(const string* s1, const string* s2) const
{
if (s1 == s2)
return true;
if ((s1==NULL) || (s2==NULL))
return false;
return (0 == s1->compare(s2->c_str()));
}
};
map<string*, string*, compareByValue> nodeIdToIpAddress;
for (int i = 0; i < nrec; ++i) {
nodeIdToIpAddress[ptr1[i]] = ptr2[i];
cout << "Added " << *(ptr1[i]) << " , " << *(ptr2[i]) << endl;
}
cout << "map has " << nodeIdToIpAddress.size() << " elements!" << endl;
Run Code Online (Sandbox Code Playgroud)
我有一个地图,维护键,值对,它们是指向字符串对象的指针.我确信键和值都不是NULL指针.当我运行上面的程序(好吧,我跳过周围的代码以使其更容易理解),"添加......"被打印49次.ptr1 [i],ptr2 [i]是字符串对象的指针,不是NULL指针,因为我的程序不会发生段错误.
我遇到的问题是,当我在最后打印地图的大小时,它表示地图中只有1个元素. …
我不能map上课,这里有什么不对?我无法弄清楚,请帮忙:
#include <map>
#include <iterator>
class base {
public:
bool delete_lowest(map<char, double> &frequencies)
{
double min=1; char del ; box b1;
for (iterator itr = frequencies.begin(); itr != frequencies.end(); ++itr)
{
if(itr->second < min)
{
min= itr->second ;
del= itr->first ;
}
}
frequencies.erase(del) ;
return true;
}
Run Code Online (Sandbox Code Playgroud)
我收到的错误如"未声明地图"等等.我认为我编码的方式不是正确的方法.那我该怎么办?谢谢
是List:ArrayList :: Map:HashMap?
如果没有,这些相互之间的差异有何不同?
我可能在这里使用了错误的术语,但这正是我想要做的.我想创建一个地图,其中包含每个键的值和每个键的对象的值.所以使用这段代码:
var myMap = {};
var keyVal = "abc";
var objVal = "123";
myMap.keyVal = objVal;
Run Code Online (Sandbox Code Playgroud)
现在我想要返回的是一个看起来像的JSON对象,{"abc":"123"}而是返回它{"keyVal":"123"}.如何让它使用键的实际变量内容而不是变量名?(或者我真的认为它根本不使用变量,只是将'keyVal'视为键名)
map<string, string> info;
info["name"] = "something";
info["id"] = "5665";
Run Code Online (Sandbox Code Playgroud)
在C++中初始化这样的地图有什么更好的方法?
编辑:我想这样做没有任何c ++库或额外的代码.像这样的东西:
info["name", "id"] = {"something", "5665"};
Run Code Online (Sandbox Code Playgroud) 假设我有一份清单,比方说
lst1 = [1,2,3,4]
Run Code Online (Sandbox Code Playgroud)
还有另一个清单
lst2 = [8,9]
Run Code Online (Sandbox Code Playgroud)
和一个功能,说
func = lambda x,y: x+y
Run Code Online (Sandbox Code Playgroud)
我想要做的是生成一个列表,其元素是lst1元素和lst2的总和.即,我想用lst1和lst2生成一个lst,而lst应该是
[1+8+9, 2+8+9, 3+8+9, 4+8+9].
Run Code Online (Sandbox Code Playgroud)
我怎么能用map()来做呢?
我有一段这样的代码:
set<string>::iterator it1;
set<string>::iterator it2;
pair<set<string>::iterator,bool> ret;
set<string> s;
ret = s.insert("bbbb1");
it1 = ret.first;
ret = s.insert("bbbb2");
it2 = ret.first;
map<set<string>::iterator, set<string>::iterator> m;
m.insert(make_pair(it1,it2));
Run Code Online (Sandbox Code Playgroud)
但最后一行"m.insert(make_pair(it1,it2));" 失败..
从sql数据库,我正在阅读一个包含2个字段的表:appName,user.所以我可能会看到:
+-------------+
| appA | John |
+-------------+
| appB | Mary |
+-------------+
| appC | Tom |
+-------------+
| appA | John |
+-------------+
| appA | Mary |
+-------------+
Run Code Online (Sandbox Code Playgroud)
这些记录中的每一个都作为AppClass的对象存储在appName和user中.现在,我想列出不同用户运行应用程序的次数.所以:
+-----------------+
| appA | John | 2 |
+-----------------+
| appA | Mary | 1 |
+-----------------+
| appB | Mary | 1 |
+-----------------+
| appC | Tom | 1 |
+-----------------+
Run Code Online (Sandbox Code Playgroud)
是否可以使用带有2个键的HashMap进行计数?
在我的程序中,我有一个HashMap.它将字符串的HashSets作为其键,将字符串的PriorityQueues作为其值.当我更改其中一个键的内容时,它不再保留为HashMap的成员.这对我来说似乎很奇怪,因为我没有更改密钥的引用.我只是改变了它的内容.请看下面的代码:
HashMap<HashSet<String>, PriorityQueue<String>> myHashMap=new HashMap<>();
HashSet<String> myHashSet=new HashSet<>();
myHashSet.add("abc");
myHashSet.add("mnq");
myHashSet.add("al;ksghl");
PriorityQueue<String> myPriorityQueue=new PriorityQueue<>();
myPriorityQueue.add("3h4");
myPriorityQueue.add("lskdjf");
myHashMap.put(myHashSet, myPriorityQueue);
if(myHashMap.containsKey(myHashSet))
System.out.println("Yes!");
myHashSet.remove("abc");
if(myHashMap.containsKey(myHashSet))
System.out.println("Yes!");
Run Code Online (Sandbox Code Playgroud)
基本上,我希望看到两个"是的!",实际上,它只打印一个.我做了一个彻底的调试,并意识到myHashSet的参考号在删除其中一个成员后没有改变.所以,这个程序没有理由不打印第二个"是的!".
任何形式的帮助都非常感谢.