可能重复:
如何在Perl中创建哈希散列?
我需要创建一些等价于map:name(字符串)来将日期(字符串/ int)映射到值,即map {string => map {string => value}}.我应该如何在perl中使用它?以下代码不起作用.
my %strtomap_;
# given $str_, $date_, $val_
if ( ! exists $strtomap_ { $str_ } )
{
my %new_map_date_to_val_ ;
$new_map_date_to_val_{$date_} = $val_;
$strtomap_ { $str_ } = %new_map_date_to_val_ ;
}
else
{
$strtomap_ { $str_ } { $date_ } = $val_;
}
Run Code Online (Sandbox Code Playgroud) 我使用遗留库,需要使用cast Object to Collection.为避免异常,我认为使用instanceof.所以问题二:1.如果我使用instanceof - 需要使用try .. catch cast异常以避免异常?2.它是否达到了性能?谢谢.
我有一个有以下私人成员的班级:
private:
int *vals_;
size_type *cidx_;
std::map< size_type, std::pair<size_t, unsigned int> > ridx_;
Run Code Online (Sandbox Code Playgroud)
现在我试图在operator << overload中访问这些变量:(注意m是const)
std::ostream& operator<<(std::ostream &os, const SMatrix &m)
{
os << m.cidx_[0] << endl;
os << m.ridx_[0].first << endl;
return os;
}
Run Code Online (Sandbox Code Playgroud)
我发现m.cidx_ [0]会起作用,但m.ridx_ [0] .first会出错:
错误:将'const std :: map,std :: less,std :: allocator >>>'作为'_Tp&std :: map <_Key,_Tp,_Compare,_Alloc> :: operator []的'this'参数传递( const _Key&)[with _Key = unsigned int,_Tp = std :: pair,_Compare = std :: less,_Alloc = std :: allocator >>]'丢弃限定符
我认为这意味着operator []是一个修改操作符,因此与m是const的事实相矛盾.但是为什么它适用于vals_和cidx_,它们是int和size_type数组?
我只是想把所有事情都记在心里.当我在Java中使用列表或地图时,地图和列表实际上并不存储对象的副本,对吧?它们只包含指向它们的指针?我认为就是这样,我只是想检查并巩固我的知识.
嗨,如果我是C++我创建了一个类型的STL地图map<int, vec<double>>是存储在连续放置在内存中的不同键下的向量吗?
我正在寻找一种最好的方法来循环一个涉及尽可能少的资源的地图.假设我有一个对象作为值,键是一个引用该对象的字符串.通过以下两个循环,我可以知道哪一个更好,你是如何证明它只运行最少的资源?
for(Map.Entry<String, MyObject> entry : myMap.entrySet()) {
...
}
for( String key : myMap.keySet() ) {
...
}
Run Code Online (Sandbox Code Playgroud)
谢谢 @!
有许多类似的问题,实际上我从其他几个帖子中编写了以下代码.不幸的是,我仍然有一个错误,我似乎无法破解 - 虽然我做了很多15年前的c ++开发.
我想使用地图制作一个简单的静态查找表.
这是到目前为止的代码(代码css似乎不能很好地呈现它):
enum RegionCodeEnum
{
One,
Two,
Three
};
enum DeviceCodeEnum
{
AAA,
BBB,
CCC
};
class LookupTable
{
friend class constructor;
struct constructor
{
constructor()
{
table[One] = AAA;
table[Two] = AAA;
table[Three] = CCC;
}
};
static constructor cons;
public:
LookupTable(void);
static DeviceCodeEnum GetDeviceFromRegion(RegionCodeEnum RegionCode);
private:
static map<RegionCodeEnum, DeviceCodeEnum> table;
};
LookupTable::constructor LookupTable::cons;
LookupTable::LookupTable(void)
{
}
DeviceCodeEnum LookupTable::GetDeviceFromRegion(RegionCodeEnum RegionCode)
{
return table[RegionCode];
}
Run Code Online (Sandbox Code Playgroud)
从其他地方代码我有这个代码:
DeviceCodeEnum code= LookupTable::GetDeviceFromRegion(One);
Run Code Online (Sandbox Code Playgroud)
我得到的编译错误是:
error LNK2001: unresolved external symbol "private: …Run Code Online (Sandbox Code Playgroud) 不确定有什么问题......它应该工作还是可能缺少什么?以下是代码:
public class TestOracleMap implements java.io.Serializable{
static TreeMap<String, Integer> map;
static TreeMap<String, Integer> localMap = new TreeMap<String, Integer>();
public static void StoreMapInDB(TreeMap<String, Integer> map) throws
IOException, FileNotFoundException{
try {
PreparedStatement insertMap = null;
//String insertString = "INSERT INTO TESTMAP(ID, MPFIELD) VALUES (1, ?)";
Connection con=null;
con.setAutoCommit(false);
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection(
"jdbc:oracle:thin:@oXXX",
"XXX",
"XXX");
ByteArrayOutputStream bos = new ByteArrayOutputStream() ;
ObjectOutputStream out = new ObjectOutputStream(bos);
out = new ObjectOutputStream(bos) ;
out.writeObject(map);
out.close();
byte[] buf = bos.toByteArray();
PreparedStatement prepareStatement = con.prepareStatement("insert into
TESTMAP(ID,MAPFIELD)values(?,?)");
prepareStatement.setLong(1, …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个优雅的替代品:
if (MyMap.count(x)) return MyMap[x];
Run Code Online (Sandbox Code Playgroud)
虽然这个代码做了我想要的 - 它返回一个条目(如果存在) - 在元素存在的情况下,它搜索地图两次.有更优雅的方式吗?